|
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件 ★ 免费下载 ★ ★ 使用帮助★
Sub test()
Dim ar, br, cr, dr As Variant
Dim i, j, k, m, icolumn1, icolumn2 As Integer, isum
Dim d As Object
Set d = CreateObject("scripting.dictionary")
ar = Sheet1.[a1].CurrentRegion
ar = Sheet1.[a1].Resize(UBound(ar), UBound(ar, 2) + 1)
ar(1, UBound(ar, 2)) = "32班": ar(1, UBound(ar, 2) - 1) = "全县"
d(ar(1, UBound(ar, 2))) = UBound(ar, 2): d(ar(1, UBound(ar, 2) - 1)) = UBound(ar, 2) - 1
For j = 5 To UBound(ar, 2) - 2
ar(1, j) = Sheet1.Cells(1, j + 13)
d(ar(1, j)) = j
Next
ar(2, UBound(ar, 2)) = 1
For i = 3 To UBound(ar)
If ar(i - 1, UBound(ar, 2) - 2) > ar(i, UBound(ar, 2) - 2) Then
ar(i, UBound(ar, 2)) = ar(i - 1, UBound(ar, 2)) + 1
Else
If ar(i - 1, UBound(ar, 2) - 2) = ar(i, UBound(ar, 2) - 2) Then
ar(i, UBound(ar, 2)) = ar(i - 1, UBound(ar, 2))
End If
End If
Next
cr = Sheet1.Range("p1:x" & Sheet1.[p65536].End(xlUp).Row)
ReDim dr(1 To UBound(cr) - 1, 1 To UBound(cr, 2) - 2)
For i = 2 To UBound(cr)
icolumn1 = d(cr(i, 1))
For j = 3 To UBound(cr, 2)
icolumn2 = d(cr(1, j))
For k = 2 To UBound(ar)
If ar(k, icolumn1) <= cr(i, 2) Then
If ar(k, icolumn2) > 0 Then
m = m + 1
isum = ar(k, icolumn2) + isum
End If
Else
Exit For
End If
Next
If m > 0 Then
dr(i - 1, j - 2) = Format(isum / m, "0.000")
Else
dr(i - 1, j - 2) = "平均数不存在"
End If
m = 0: isum = 0
Next
Next
Sheet1.[r2].Resize(100, 20).ClearContents
Sheet1.[r2].Resize(UBound(dr), UBound(dr, 2)) = dr
MsgBox "ok"
End Sub |
|