|
|
教师排名代码。
- Sub test6()
- Dim r%, i%
- Dim arr, brr, crr(), drr()
- Dim d As Object
- Application.ScreenUpdating = False
- Application.DisplayAlerts = False
- Set d = CreateObject("scripting.dictionary")
- Set d1 = CreateObject("scripting.dictionary")
- Set d2 = CreateObject("scripting.dictionary")
- Call pub
- For Each ws In Worksheets(Array("七年级", "八年级", "九年级"))
- With ws
- Set d(ws.Name) = CreateObject("scripting.dictionary")
- r = .Cells(.Rows.Count, 1).End(xlUp).Row
- c = .Cells(2, .Columns.Count).End(xlToLeft).Column
- arr = .Range("a2").Resize(r - 1, c)
- For i = 2 To UBound(arr)
- For j = 5 To UBound(arr, 2)
- arr(i, j) = Val(arr(i, j))
- Next
- Next
-
- ls = 9
- For j = 5 To UBound(arr, 2)
- Set d(ws.Name)(arr(1, j)) = CreateObject("scripting.dictionary")
- For i = 2 To UBound(arr)
- bj = arr(i, 1) & arr(i, 2)
- If d_js.exists(bj) Then
- If d_js(bj).exists(arr(1, j)) Then
- js = d_js(bj)(arr(1, j))
- If Not d(ws.Name)(arr(1, j)).exists(js) Then
- ReDim brr(1 To ls)
- brr(1) = arr(1, j)
- brr(2) = js
- Set brr(3) = CreateObject("scripting.dictionary")
- Else
- brr = d(ws.Name)(arr(1, j))(js)
- End If
- brr(3)(arr(i, 2)) = ""
- If Len(arr(i, j)) <> 0 Then
- brr(4) = brr(4) + 1
- brr(5) = brr(5) + arr(i, j)
- If d_3f.exists(ws.Name) Then
- If d_3f(ws.Name).exists(arr(1, j)) Then
- If arr(i, j) >= d_3f(ws.Name)(arr(1, j))("及格分") Then
- brr(6) = brr(6) + 1
- End If
- If arr(i, j) >= d_3f(ws.Name)(arr(1, j))("关爱分") Then
- brr(7) = brr(7) + 1
- End If
- End If
- End If
- End If
- d(ws.Name)(arr(1, j))(js) = brr
- End If
- End If
- Next
- Next
- End With
- Next
- On Error Resume Next
- Worksheets("教师排名").Delete
- On Error GoTo 0
- Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
- With ws
- .Name = "教师排名"
- n1 = 1
- For Each aa In d.keys
- i1 = 1
- .Columns(n1 + 2).NumberFormatLocal = "@"
- .Columns(n1 + 5).Resize(, 2).NumberFormatLocal = "0.00%"
- With .Cells(1, n1)
- .Value = aa & "教师排名"
- .Resize(1, 9).Merge
- With .Font
- .Name = "微软雅黑"
- .Size = 16
- End With
- End With
- With .Cells(2, n1).Resize(1, 9)
- .Value = Array("科目", "教师姓名", "任教班级", "总人数", "平均分", "及格率", "关爱率", "三率评估分", "排名")
- .Borders.LineStyle = xlContinuous
- .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
- With .Font
- .Name = "微软雅黑"
- .Size = 11
- End With
- End With
-
- m = 0
- i1 = 3
- For Each bb In d(aa).keys
- d2.RemoveAll
- ReDim crr(1 To d(aa)(bb).Count, 1 To 9)
- m = 0
- For Each cc In d(aa)(bb).keys
- brr = d(aa)(bb)(cc)
- brr(3) = Join(brr(3).keys, ",")
- m = m + 1
- For j = 1 To UBound(brr)
- crr(m, j) = brr(j)
- Next
- Next
- For i = 1 To UBound(crr)
- If Len(crr(i, 4)) <> 0 And crr(i, 4) <> 0 Then
- crr(i, 5) = Round(crr(i, 5) / crr(i, 4), 2)
- crr(i, 6) = Round(crr(i, 6) / crr(i, 4), 4)
- crr(i, 7) = Round(crr(i, 7) / crr(i, 4), 4)
- crr(i, 8) = Round(crr(i, 5) * 0.4 + crr(i, 6) * 0.4 * 100 + crr(i, 7) * 0.2 * 100, 2)
- d2(crr(i, 8)) = d2(crr(i, 8)) + 1
- End If
- Next
- nn = 1
- kk = d2.keys
- For k = 0 To UBound(kk)
- mm = Application.Large(kk, k + 1)
- ss = d2(mm)
- d2(mm) = nn
- nn = nn + ss
- Next
- For i = 1 To UBound(crr)
- If Len(crr(i, 8)) <> 0 Then
- crr(i, 9) = d2(crr(i, 8))
- End If
- Next
- With .Cells(i1, n1).Resize(UBound(crr), UBound(crr, 2))
- .Value = crr
- .Borders.LineStyle = xlContinuous
- .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
- With .Font
- .Name = "微软雅黑"
- .Size = 11
- End With
- End With
- .Cells(i1, n1).Resize(UBound(crr), 1).Merge
- i1 = i1 + UBound(crr)
- Next
- n1 = n1 + 10
- Next
- With .UsedRange
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlCenter
- End With
- .UsedRange.EntireColumn.AutoFit
- End With
- Application.ScreenUpdating = True
- MsgBox "教师排名计算完毕!"
- End Sub
复制代码 |
|