- Sub test()
- Dim r%, i%
- Dim arr, brr
- Dim d As Object
- Application.ScreenUpdating = False
- Application.DisplayAlerts = False
- Set d = CreateObject("scripting.dictionary")
- With Worksheets("成绩输入")
- r = .Cells(.Rows.Count, 1).End(xlUp).Row
- arr = .Range("a2:l" & r)
- End With
- ReDim brr(1 To UBound(arr), 1 To 7)
- For i = 1 To UBound(arr)
- brr(i, 1) = arr(i, 1)
- For j = 4 To UBound(arr, 2)
- brr(i, 2) = brr(i, 2) + arr(i, j)
- Next
- For j = 4 To 6
- brr(i, 4) = brr(i, 4) + arr(i, j)
- Next
- brr(i, 4) = brr(i, 4) + arr(i, 8) * 0.6 + arr(i, 9) * 0.4
- brr(i, 3) = brr(i, 4)
- For Each y In Array(7, 10, 11, 12)
- If arr(i, y) >= 85 Then
- brr(i, 3) = brr(i, 3) + 5
- ElseIf arr(i, y) >= 75 Then
- brr(i, 3) = brr(i, 3) + 2
- End If
- Next
- Next
- For j = 2 To 4
- d.RemoveAll
- For i = 1 To UBound(arr)
- d(brr(i, j)) = d(brr(i, j)) + 1
- Next
- nn = 1
- kk = d.keys
- For k = 0 To UBound(kk)
- mm = Application.Large(kk, k + 1)
- ss = d(mm)
- d(mm) = nn
- nn = nn + ss
- Next
- For i = 1 To UBound(arr)
- brr(i, j + 3) = d(brr(i, j))
- Next
- Next
- d.RemoveAll
- For j = 5 To 7
- If Not d.exists(j) Then
- Set d(j) = CreateObject("scripting.dictionary")
- End If
- For i = 1 To UBound(brr)
- If Not d(j).exists(brr(i, 1)) Then
- ReDim crr(1 To 24)
- crr(1) = brr(i, 1)
- crr(2) = "班"
- Else
- crr = d(j)(brr(i, 1))
- End If
- n = Application.Match(brr(i, j), Array(0, 16, 31, 46, 61, 76, 91, 106, 121, 136, 151, 181, 211, 241, 271, 301, 331, 361, 401, 451, 501, 551, 601))
- If Not IsError(n) Then
- crr(n + 2) = crr(n + 2) + 1
- End If
- d(j)(brr(i, 1)) = crr
- Next
- Next
-
- For Each aa In d.keys
- ReDim brr(1 To d(aa).Count, 1 To 24)
- m = 0
- For Each bb In d(aa).keys
- m = m + 1
- crr = d(aa)(bb)
- For j = 4 To UBound(crr)
- crr(j) = crr(j) + crr(j - 1)
- Next
- For j = 1 To UBound(crr)
- brr(m, j) = crr(j)
- Next
- Next
- d(aa) = brr
- Next
-
- q = 0
- With Worksheets("班总分排名")
- .Cells.Clear
- m = 1
- For Each aa In d.keys
- q = q + 1
- brr = d(aa)
- With .Cells(m, 1)
- .Value = "九年级第一次月考" & Application.Choose(q, "班级总分", "加权A总分", "加权B总分") & "排名表"
- .Resize(1, 24).Merge
- With .Font
- .Size = 20
- .Bold = True
- End With
- End With
- .Cells(m + 1, 1).Resize(1, 24) = [{" 前若干名","","15名","30名","45名","60名","75名","90名","105名","120名","135名","150名","180名","210名","240名","270名","300名","330名","360名","400名","450名","500名","550名","600名"}]
- .Cells(m + 2, 1).Resize(UBound(brr), UBound(brr, 2)) = brr
- With .Cells(m + 1, 1).Resize(UBound(brr) + 1, 24)
- .Borders.LineStyle = xlContinuous
- End With
- m = m + UBound(brr) + 3
- Next
- With .UsedRange
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlCenter
- End With
- End With
- Application.ScreenUpdating = True
- MsgBox "数据统计完毕!"
- End Sub
复制代码 |