- Sub 录取()
- Range("A2:A10000") = ""
- Dim arr, ar(), br, brr(), cr()
- Dim m, n, i, j, x, y, p, a, b, c, s, k, t, temp
- Dim d As Object
- Set d = CreateObject("scripting.dictionary")
- arr = Range("A1").CurrentRegion
- For i = 2 To UBound(arr)
- If VBA.IsNumeric(arr(i, 10)) Then
- If arr(i, 11) = "8301" And Val(arr(i, 10)) <= 9 And arr(i, 6) = "是" And arr(i, 9) >= 460 Then
- m = m + 1
- ReDim Preserve brr(1 To 6, 1 To m)
- brr(1, m) = arr(i, 2)
- brr(2, m) = arr(i, 3)
- brr(3, m) = arr(i, 4)
- brr(4, m) = arr(i, 9)
- brr(5, m) = arr(i, 18)
- brr(6, m) = arr(i, 19)
- End If
- End If
- Next
- For i = 1 To UBound(brr, 2)
- If Not d.exists(brr(3, i)) Then
- m = 1
- ReDim br(1 To 5, 1 To m)
- Else
- br = d(brr(3, i))
- m = UBound(br, 2) + 1
- ReDim Preserve br(1 To 5, 1 To m)
- End If
- br(1, m) = brr(1, i)
- br(2, m) = brr(2, i)
- br(3, m) = brr(4, i)
- br(4, m) = brr(5, i)
- br(5, m) = brr(6, i)
- d(brr(3, i)) = br
- Next
- k = d.keys
- t = d.items
- m = 0
- arr = Sheet2.Range("L1").CurrentRegion
- For x = 0 To d.Count - 1
- For i = 1 To UBound(t(x), 2) - 1
- p = i
- For j = i + 1 To UBound(t(x), 2)
- If t(x)(4, p) < t(x)(4, j) Then p = j
- Next
- If p <> i Then
- For j = 1 To 5
- temp = t(x)(j, i)
- t(x)(j, i) = t(x)(j, p)
- t(x)(j, p) = temp
- Next
- End If
- Next
- For i = 2 To UBound(arr)
- If CStr(arr(i, 1)) = k(x) Then
- If Val(arr(i, 2)) <= UBound(t(x), 2) Then
- If t(x)(4, Val(arr(i, 2))) = t(x)(4, Val(arr(i, 2)) + 1) Then
- n = 0: a = 0: b = 0: r = 0
- For j = Val(arr(i, 2)) To 1 Step -1
- If t(x)(4, j) = t(x)(4, j - 1) Then n = n + 1 Else: a = j: Exit For
- Next
- For j = Val(arr(i, 2)) To UBound(t(x), 2)
- If t(x)(4, j) = t(x)(4, j + 1) Then n = n + 1 Else: b = j: Exit For
- Next
- If n > 0 Then
- ReDim cr(1 To n, 1 To 5)
- For j = a To b
- r = r + 1
- For y = 1 To 5
- cr(r, y) = t(x)(y, j)
- Next
- Next
- For y = 1 To UBound(cr) - 1
- p = y
- For j = y + 1 To UBound(cr)
- If cr(p, 5) < cr(j, 5) Then p = j
- Next
- If p <> y Then
- For j = 1 To 5
- temp = cr(y, j)
- cr(y, j) = cr(p, j)
- cr(p, j) = temp
- Next
- End If
- Next
- For j = 1 To a - 1
- m = m + 1
- ReDim Preserve ar(1 To 5, 1 To m)
- For y = 1 To 5
- ar(y, m) = t(x)(y, j)
- Next
- Next
- c = Val(arr(i, 2)) - a + 1
- For j = 1 To c
- m = m + 1
- ReDim Preserve ar(1 To 5, 1 To m)
- For y = 1 To 5
- ar(y, m) = cr(j, y)
- Next
- Next
- End If
- Else
- For j = 1 To Val(arr(i, 2))
- m = m + 1
- ReDim Preserve ar(1 To 5, 1 To m)
- For y = 1 To 5
- ar(y, m) = t(x)(y, j)
- Next
- Next
- End If
- Else
- For j = 1 To UBound(t(x), 2)
- m = m + 1
- ReDim Preserve ar(1 To 5, 1 To m)
- For y = 1 To 5
- ar(y, m) = t(x)(y, j)
- Next
- Next
- End If
- End If
- Next
- Next
- arr = Range("A1").CurrentRegion
- s = 0
- For i = 2 To UBound(arr)
- For x = 1 To UBound(ar, 2)
- If CStr(arr(i, 2)) = CStr(ar(1, x)) Then Cells(i, 1) = "OK": s = s + 1
- Next
- Next
- MsgBox "共有 " & s & " 名同学录取完毕!"
- Set d = Nothing
- End Sub
复制代码 |