|
Sub 生成监考表()
Dim i, j, k, m, n, p, q, s, t, a, b, x, xx, zs1, mm, zjz, ss, jc, sc, irow, irow1, icolumn As Integer
Dim ar, tepar1, br, cr
Dim d, d1, d2 As Object
Set d = CreateObject("scripting.dictionary")
Set d1 = CreateObject("scripting.dictionary")
Set d2 = CreateObject("scripting.dictionary")
With Sheets("监考安排")
irow = .[b65536].End(xlUp).Row
icolumn = .[iv1].End(xlToLeft).Column
ar = .[a1].Resize(irow, icolumn)
End With
For i = 11 To irow
d(i) = ar(i, 2)
Next
irow1 = Sheets("监考安排").[g65536].End(xlUp).Row
For j = 8 To icolumn
For b = 5 To irow1
If ar(b, j) = "" Then
zs1 = zs1 + 1
End If
Next
Next
jc = 8
zjz = irow
ReDim tepar1(1 To irow1 - 4, 1 To icolumn - 7)
For m = 8 To icolumn
t = WorksheetFunction.CountIf(Sheets("监考安排").Cells(1, m).Resize(irow1, 1), "不排监考")
n = n + irow1 - t - 4
mm = d.Count
If irow1 - 4 - t > 0 And n <= zs1 Then
If mm < irow1 - 4 - t Then
For s = 1 To irow1 - 4
If Len(tepar1(s, m - jc - 1)) > 0 Then
ss = zjz + s
d(ss) = tepar1(s, m - jc - 1)
End If
Next
zjz = ss
End If
ReDim br(1 To irow1 - 4 - t, 1 To 1)
For p = 1 To irow1 - 4 - t
mm = d.Count
q = WorksheetFunction.RandBetween(1, mm)
x = d.keys()(q - 1)
tepar1(p, m - 7) = d(x)
br(p, 1) = d(x)
d.Remove x
Next
With Sheets("监考安排")
For xx = 5 To irow1
If .Cells(xx, m) <> "不排监考" Then
a = a + 1
.Cells(xx, m) = br(a, 1)
End If
Next
End With
End If
a = 0
Next
cr = Sheets("监考安排").[a1].Resize(irow, icolumn)
For j = 8 To icolumn
sc = Val(WorksheetFunction.Substitute(cr(4, j), "分钟", ""))
For k = 5 To irow1
If cr(k, j) <> "不排监考" Then
d1(cr(k, j)) = d1(cr(k, j)) + 1
d2(cr(k, j)) = d2(cr(k, j)) + sc
End If
Next
Next
For i = 11 To irow
Sheets("监考安排").Cells(i, 3) = d1(cr(i, 2))
Sheets("监考安排").Cells(i, 4) = d2(cr(i, 2))
Next
MsgBox "ok"
End Sub |
|