怎么用EXCEL编排考场和考号?

例:有21个班级,每个年级考试时一起考,考生1046人。
要求:班级全打乱,每个考场30人,学生的前、后、左、右不能是 同一个班级的学生,考号是考场号加座位号
急!!!!!!在这先谢谢各位高手了!
有哪位高手做成成品了,给我传一份,不甚感激,我的邮箱是[email protected]

工具/材料:电脑,excel

1.打开excel,打乱原有排序,可以在辅助列中利用rand函数生成0-1中的任意数,之后按照辅助列排序。

2.安排考点:考点安排比如一个考点26个人(模拟数据5个人)。就是要连续生成26个1,20个2,依次类推,可以利用int(row()/26)+1公式生成。

3.座位号:座位号是重复生成连续的数列,1,2,3,4,5……;1,2,3,4,5……;可以利用求余函数mod实现。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-17

一、先编排考场

1.首先要做的就是先安排各个班级的每个学生所在的考场,尽量让同一考场不能有同班同学。或者是,同一考场出现部分或极少的同班同学。

2.比如,一个年级有20个班级,每个班级有50个学生,那么,学生总人数就是1000个人;如果一个考场安排30个学生,那么,每个考场就有30个座位,那么,总的考场数量是31个。

3.现在先安排考场。

4.如下图,增加一“考场”的列,然后,使用填充功能,从上往下填充1到31,1到31代表的就是考场号;

5.注意,从1填充到31,然后,接着又从1填充到31,直到把整个年级的学生都填充完为止。

6.通过填充,就得到如下图的数据了。

7.现在看下图,每个班级每个学生都安排好考城了,分别在不同的考场,即便是有同班的同学在同一考场,也是少数人,稍后通过下面的方法,就能解决相邻的问题。

二、同一考场的同班同学不能在相邻位置

1.通过如上的操作,整个年级的每个学生都安排好了考场了,现在,要做的就是同一考场内的同一班级的学生不能在相邻的位置。

  A、先通过排序的办法,对考场号进行排序

  这样就能将同一考场的学生排序到一块。

  B、同一考场安排座位

  同一考场内,多数同学是不同班级的,但是有一小部分同学是同班级的,因此,得保证同一班级的同学不能在相邻的位置。

2.针对同一考场的学生数据进行排序,其它考场不管。或者将每个考场的学生数据单独保存成为一个Excel文件。

  排序的时候,按照学生姓名进行排序,这样基本就能解决相邻的问题了,排序好了以后,再通过填充的办法,给同一考场的学生填充上1到30的座位号。

如此,整个编排考场,同班不能相邻的问题就能圆满的解决了。

第2个回答  2011-05-01
Public Count As Long
Public NumberPerRoom As Integer
Public NumberPerColumn As Integer
Public 座号()
Public m_Left As Long

Sub Start()
Count = 1129 '总人数
m_Left = 1129 + 1 '剩余人数
NumberPerRoom = 30 '每考场人数
NumberPerColumn = 6 '每组人数
排座
End Sub

'主程序
Sub 排座()

Dim 考场数 As Integer
Dim m_Cell As Range
考场数 = Int(Count / NumberPerRoom)
If 考场数 < Count / NumberPerRoom Then
考场数 = 考场数 + 1
End If

ReDim 座号(1 To 考场数, 1 To NumberPerRoom)
For j = 1 To NumberPerRoom
For i = 1 To 考场数
m_Left = m_Left - 1
Set m_Cell = GetOne(i, j)
If IsEmpty(m_Cell) Then
Exit Sub
End If

座号(i, j) = m_Cell.Offset(0, 1).Value

With Worksheets("考场安排")
.Cells(m_Cell.Value, 5) = i
.Cells(m_Cell.Value, 6) = j
End With

m_Cell.EntireRow.Delete
Next
Next
End Sub

'取一个学生
Function GetOne(i, j) As Range
Dim m_Row As Long
m_Row = Int(m_Left * Rnd() + 1)
With Worksheets("临时")
While True
班级 = .Cells(m_Row, 2).Value
If 邻座是同班(i, j, 班级) = False Then
Set GetOne = .Cells(m_Row, 1)
Exit Function
Else
m_Row = Int(m_Left * Rnd() + 1)
End If
Wend
End With
End Function

'判断邻座是不是同班
Function 邻座是同班(i, j, 班级) As Boolean
Dim 邻座(1 To 4) As Integer
Dim All As Integer
邻座(1) = j - 1
邻座(2) = j + 1
邻座(3) = j - NumberPerColumn
邻座(4) = j + NumberPerColumn
邻座是同班 = True
All = 0
邻座是同班 = True
For n = 1 To 4
If 邻座(n) < 1 Then
All = All + 1
ElseIf 邻座(n) > NumberPerRoom Then
All = All + 1
ElseIf IsEmpty(座号(i, 邻座(n))) Then
All = All + 1
ElseIf 座号(i, 邻座(n)) <> 班级 Then
All = All + 1
End If
Next

If All = 4 Then
邻座是同班 = False
End If

End Function追问

你好,我对这个怎么运行不懂,你能告诉我下怎么用吗?或者发给我一个做好的成品也行~

运行出错,麻烦给个正确的代码吧!

参考资料:http://zhidao.baidu.com/question/100957601.html

第3个回答  2017-01-15
在工作表sheet1中,A列为班号,共4个班级,各班人数不相等,B列为学生姓名,现在要求在sheet2的BC两列中用公式依次排列学生的班号和姓名。
第4个回答  2011-05-04
帮你弄好了。今后不要再冒充别人了。本回答被提问者采纳
相似回答