楼主 liuguansky |
Q:如何依班级、考场可容人数及考场个数自动生成考生准考证号?[准考证号为班级+考场号+座位号] 现在已知考场个数,每个考场可容纳的人数,考生清单,因为考场个数在变化,考生人数也在变,如何自己生成准考证号用于考试座位安排? A;用如下代码可以实现:
- Sub justtest()
- Dim arr1, arr2, i&, k&, arrt(), arrr() '定义变量
- arr = Cells(2, 1).Resize(Cells(1, 1).End(4).Row - 1, 2).Value '获取编号班级信息,赋值给数组
- arr2 = Cells(6, "f").Resize(Cells(6, "f").End(4).Row - 5, 2).Value '获取考场信息,赋值组数组
- ReDim arrt(1 To UBound(arr, 1), 1 To 2) '重定义数组,用于储存目标返回记录
- ReDim arrr(1 To UBound(arr2, 1)) '重定义数组,用于储存考场累计人数
- ReDim arrs(1 To UBound(arr2, 1)) '重定义数组,用于储存考场累计个数
- arrr(1) = arr2(1, 1) * arr2(1, 2): arrs(1) = arr2(1, 1) '初始化数组第一个值。
- For i = 2 To UBound(arr2, 1) '在考场安排中循环,累加考场个数与已安排人数
- arrr(i) = arr2(i, 1) * arr2(i, 2) + arrr(i - 1) '累加人数
- arrs(i) = arr2(i, 1) + arrs(i - 1) '累加考场数
- Next i
- k = 1
- For i = 1 To UBound(arr, 1) '在班级信息中循环
- If i > arrr(k) Then k = k + 1 '如果超过考场累加人数,则加考场计数加1
- If k = 1 Then m = i: n = 0 Else: m = i - arrr(k - 1): n = arrs(k - 1) '第一个考场不减之前累计人数,考场数为0;后面考场的人数要进行扣减之前人数。
- arrt(i, 1) = "'" & Format(((m - 1) \ arr2(k, 2)) + 1 + n, "00") '生成考场号,前面加"'",强制转换为文本。
- arrt(i, 2) = arr(i, 2) + 1000 & Space(1) & Mid(arrt(i, 1), 2) & Space(1) & Format(((m - 1) Mod arr2(k, 2)) + 1, "00") '生成准考证号
- Next i
- Range("c2:d" & Rows.Count).ClearContents '清空区域,方便返回赋值。
- Cells(2, 3).Resize(UBound(arrt, 1), 2) = arrt '赋值目标记录值。
- End Sub
|