本帖最后由 panan12320 于 2012-6-15 21:07 编辑
第一题
Sub dfg()
Dim i%, a1(), a2()
Set d = CreateObject("scripting.dictionary")
Sheets("题2").Range("e2:f65536").ClearContents
a1 = Range("a2:b" & Range("a65536").End(3).Row)
a2 = Range("d2:e" & Range("e65536").End(3).Row)
Range("D1:F65536").Font.Bold = False
k = UBound(a2, 1)
For i = 1 To UBound(a2, 1)
d(a2(i, 1)) = a2(i, 2)
d(a2(i, 2)) = "0"
Next
For i = 1 To UBound(a1, 1)
If d.exists(a1(i, 1)) Then
d(a1(i, 1)) = d(a1(i, 1)) + a1(i, 2)
Else
k = k + 1
d.Add k, a1(i, 1)
d.Add a1(i, 1), a1(i, 2)
End If
Next
ReDim a3(1 To d.Count / 2, 1 To 3)
For i = 1 To d.Count / 2
a3(i, 1) = i
a3(i, 2) = d(i)
a3(i, 3) = d(a3(i, 2))
Next
[d2].Resize(UBound(a3, 1), UBound(a3, 2)) = a3
Range("D" & UBound(a2, 1) + 2 & ":F" & Range("e65536").End(3).Row + 1).Font.Bold = True
End Sub
第二题
Sub UI()
Dim i%, arr()
Set d = CreateObject("scripting.dictionary")
Sheets("题2").Range("e2:f65536").ClearContents
arr = Range("a2:b" & Range("a65536").End(3).Row)
For i = 1 To UBound(arr, 1)
If arr(i, 1) = "" Then arr(i, 1) = arr(i - 1, 1)
If arr(i, 2) >= [c2] And arr(i, 2) <= [d2] Then
d(arr(i, 1)) = d(arr(i, 1)) + arr(i, 2)
End If
Next
[E2].Resize(d.Count, 1) = Application.Transpose(d.keys)
[F2].Resize(d.Count, 1) = Application.Transpose(d.items)
End Sub
重新写了第一题
Sub du()
Dim i%, a1(), a2(), a3(1 To 6000, 1 To 3)
Set d = CreateObject("scripting.dictionary")
Sheets("题2").Range("e2:f65536").ClearContents
a1 = Range("a2:b" & Range("a65536").End(3).Row)
a2 = Range("d2:e" & Range("e65536").End(3).Row)
Range("D1:F65536").Font.Bold = False
k = UBound(a2, 1)
For i = 1 To UBound(a2, 1)
d(a2(i, 2)) = a2(i, 1)
a3(d(a2(i, 2)), 1) = a2(i, 1)
a3(d(a2(i, 2)), 2) = a2(i, 2)
Next
For i = 1 To UBound(a1, 1)
If d.exists(a1(i, 1)) Then
a3(d(a1(i, 1)), 3) = a3(d(a1(i, 1)), 3) + a1(i, 2)
Else
d(a1(i, 1)) = d.Count + 1
a3(d(a1(i, 1)), 1) = d(a1(i, 1))
a3(d(a1(i, 1)), 2) = a1(i, 1)
a3(d(a1(i, 1)), 3) = a3(d(a1(i, 1)), 3) + a1(i, 2)
End If
Next
[d2].Resize(UBound(a3, 1), UBound(a3, 2)) = a3
Range("D" & UBound(a2, 1) + 2 & ":F" & Range("e65536").End(3).Row + 1).Font.Bold = True
End Sub
|