- Sub total()
- Dim d As Object
- Set d = CreateObject("scripting.dictionary")
- Dim arr, i&, j%, re, sr$
- arr = Sheets("报账").Range("A1").CurrentRegion.Value
- For i = 2 To UBound(arr)
- sr = arr(i, 1) & "|" & arr(i, 2)
- If Not d.exists(arr(i, 2)) Then Set d(arr(i, 2)) = CreateObject("scripting.dictionary")
- If Not d(arr(i, 2)).exists(arr(i, 1)) Then
- d(arr(i, 2))(arr(i, 1)) = Array(arr(i, 3), 0)
- Else
- d(arr(i, 2))(arr(i, 1)) = Array(d(arr(i, 2))(arr(i, 1))(0) + arr(i, 3), 0)
- End If
- Next
- arr = Sheets("领款").Range("A1").CurrentRegion.Value
- For i = 2 To UBound(arr)
- sr = arr(i, 1) & "|" & arr(i, 2)
- If Not d.exists(arr(i, 2)) Then Set d(arr(i, 2)) = CreateObject("scripting.dictionary")
- If Not d(arr(i, 2)).exists(arr(i, 1)) Then
- d(arr(i, 2))(arr(i, 1)) = Array(0, arr(i, 3))
- Else
- d(arr(i, 2))(arr(i, 1)) = Array(d(arr(i, 2))(arr(i, 1))(0), d(arr(i, 2))(arr(i, 1))(1) + arr(i, 3))
- End If
- Next
- arr = d.keys
- ReDim re(1 To d.Count, 1 To 25)
- For i = 1 To UBound(re)
- re(i, 1) = arr(i - 1)
- For j = 2 To 25 Step 2
- If d(re(i, 1)).exists(j / 2) Then re(i, j) = d(re(i, 1))(j / 2)(0): re(i, j + 1) = d(re(i, 1))(j / 2)(1)
- Next
- Next
- Range("A3").Resize(UBound(re), UBound(re, 2)) = re
- End Sub
复制代码 |