|
楼主 |
发表于 2023-12-13 17:57
|
显示全部楼层
Sub sunTest()
Dim i, k, kk, kkk, s, ss, sss, ssss, arr, lr, sp
Dim col1, col2, rv, d
Set d = CreateObject("scripting.dictionary")
arr = Sheets("数据源").Range("a1").CurrentRegion
For i = 3 To UBound(arr)
s = arr(i, 6)
If Not d.exists(s) Then
Set d(s) = CreateObject("scripting.dictionary")
End If
ss = arr(i, 15)
If ss = "分类其他" Or ss = "分类-2-a" Then
ss = "分类-2"
End If
If Not d(s).exists(ss) Then
Set d(s)(ss) = CreateObject("scripting.dictionary")
End If
sss = arr(i, 13) & "|" & arr(i, 16) & arr(i, 17)
If Not d(s)(ss).exists(sss) Then
Set d(s)(ss)(sss) = CreateObject("scripting.dictionary")
End If
ssss = arr(i, 14)
d(s)(ss)(sss)(ssss) = d(s)(ss)(sss)(ssss) + Val(arr(i, 18))
Next i
For Each k In d.keys
Sheets("模板").Copy after:=Sheets(Sheets.Count)
With ActiveSheet
.Name = k
lr = .Cells(Rows.Count, 1).End(3).Row
.Range("a3") = .Range("a3").Value & "(" & k & ")"
For Each kk In d(k).keys
For i = 1 To lr
If InStr(.Cells(i, 1), kk) Then Exit For
Next i
If i = 3 Then
coll = 12: col2 = 14: w = 15
ElseIf i = 20 Then
col1 = 13: cl2 = 15: rw = 32
Else
col1 = 8: col2 = 11: rv = 45
End If
r = i + 2
For Each kkk In d(k)(kk).keys
r = r + 1
sp = Split(kkk, "|")
.Cells(r, 1) = sp(0)
.Cells(r, 2) = sp(1)
'.Cells(r, col1) = d(k)(kk)(kkk)("收入")
'.Cells(r, col2) = d(k)(kk)(kkk)("支出")
.Cells(rv + Val(sp(0)), "E") = .Cells(ry + Val(sp(0)), "g") + .Cells(r, col1)
.Cells(rv + Val(sp(0)), "I") = .Cells(rv + Val(sp(0)), "I") + Cells(r, col2)
Next kkk
Next kk
End With
Next k
Set d = Nothing
End Sub
|
|