|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
- Sub test()
- Dim r%, i%
- Dim arr, brr
- Dim km(1 To 2) As String
- Dim ws As Worksheet
- Dim hg(1 To 26), lk(1 To 14)
- Dim d(1 To 2) As Object
- Dim d1(1 To 2) As Object
- Dim d2(1 To 2) As Object
- Dim d3(1 To 2) As Object
- Application.ScreenUpdating = False
- Application.DisplayAlerts = False
- Set d(1) = CreateObject("scripting.dictionary")
- Set d(2) = CreateObject("scripting.dictionary")
- Set d1(1) = CreateObject("scripting.dictionary")
- Set d1(2) = CreateObject("scripting.dictionary")
- Set d2(1) = CreateObject("scripting.dictionary")
- Set d2(2) = CreateObject("scripting.dictionary")
- Set d3(1) = CreateObject("scripting.dictionary")
- Set d3(2) = CreateObject("scripting.dictionary")
- Set dsh = CreateObject("scripting.dictionary")
- km(1) = "支出"
- km(2) = "收入"
- For Each ws In Worksheets
- dsh(ws.Name) = ""
- Next
- With Worksheets("模板")
- For i = 1 To 26
- hg(i) = .Rows(i).RowHeight
- Next
- For j = 1 To 14
- lk(j) = .Columns(j).ColumnWidth
- Next
- End With
-
- With Worksheets("流水帐")
- r = .Cells(.Rows.Count, 1).End(xlUp).Row
- arr = .Range("a5:j" & r)
- For i = 1 To UBound(arr)
- yf = Month(arr(i, 1))
- For j = 1 To 2
- If Len(arr(i, j + 8)) <> 0 Then
- If Not d(j).exists(arr(i, 8)) Then
- ReDim brr(1 To 14)
- brr(1) = arr(i, 8)
- Else
- brr = d(j)(arr(i, 8))
- End If
- brr(yf + 1) = brr(yf + 1) + arr(i, j + 8)
- brr(14) = brr(14) + arr(i, j + 8)
- d(j)(arr(i, 8)) = brr
-
- If Not d1(j).exists(yf) Then
- Set d1(j)(yf) = CreateObject("scripting.dictionary")
- End If
- If Not d1(j)(yf).exists(arr(i, 8)) Then
- m = 1
- ReDim crr(1 To 4, 1 To m)
- Else
- crr = d1(j)(yf)(arr(i, 8))
- m = UBound(crr, 2) + 1
- ReDim Preserve crr(1 To 4, 1 To m)
- End If
- crr(1, m) = arr(i, 1)
- crr(2, m) = arr(i, 7)
- crr(3, m) = arr(i, j + 8)
- d1(j)(yf)(arr(i, 8)) = crr
-
- If Not d3(j).exists(arr(i, 8)) Then
- Set d3(j)(arr(i, 8)) = CreateObject("scripting.dictionary")
- End If
- If Not d3(j)(arr(i, 8)).exists(yf) Then
- m = 1
- ReDim frr(1 To 11, 1 To m)
- Else
- frr = d3(j)(arr(i, 8))(yf)
- m = UBound(frr, 2) + 1
- ReDim Preserve frr(1 To 11, 1 To m)
- End If
- frr(1, m) = m
- frr(2, m) = Month(arr(i, 1))
- frr(3, m) = Day(arr(i, 1))
- frr(4, m) = Month(arr(i, 2))
- frr(5, m) = Day(arr(i, 2))
- frr(6, m) = arr(i, 3)
- frr(7, m) = arr(i, 4)
- frr(8, m) = arr(i, 5)
- frr(9, m) = arr(i, 6)
- frr(10, m) = arr(i, 7)
- frr(11, m) = arr(i, j + 8)
- d3(j)(arr(i, 8))(yf) = frr
- End If
- Next
- Next
- End With
- For k = 1 To 2
- For Each aa In d1(k).keys
- For Each bb In d1(k)(aa).keys
- n = UBound(d1(k)(aa)(bb), 2)
- If Not d2(k).exists(bb) Then
- d2(k)(bb) = Array(0, n)
- Else
- crr = d2(k)(bb)
- If crr(1) < n Then
- crr(1) = n
- End If
- d2(k)(bb) = crr
- End If
- Next
- Next
- Next
- For k = 1 To 2
- kk = d2(k).keys
- For i = 0 To UBound(kk)
- crr = d2(k)(kk(i))
- If i = 0 Then
- crr(0) = 2
- Else
- crr(0) = d2(k)(kk(i - 1))(0) + d2(k)(kk(i - 1))(1)
- End If
- d2(k)(kk(i)) = crr
- Next
- crr(0) = d2(k)(kk(i - 1))(0) + d2(k)(kk(i - 1))(1)
- crr(1) = 1
- d2(k)("合 计") = crr
- Next
- tt = d2(1).items
- For k = 1 To 2
- With Worksheets(km(k) & "汇总")
- .UsedRange.Offset(1, 0).Clear
- .Range("a2").Resize(d(k).Count, 14) = Application.Transpose(Application.Transpose(d(k).items))
- r = .Cells(.Rows.Count, 1).End(xlUp).Row
- .Range("a1:n" & r).Borders.LineStyle = xlContinuous
- End With
- With Worksheets(km(k) & "各种费用明细")
- .Cells.Clear
- For Each aa In d2(k).keys
- crr = d2(k)(aa)
- With .Cells(crr(0), 1)
- .Value = aa
- .Resize(crr(1), 1).Merge
- End With
- Next
- r = .Cells(.Rows.Count, 1).End(xlUp).Row
- .Range("a1") = "科 目"
- With .Range("a1:a" & r)
- .Borders.LineStyle = xlContinuous
- .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
- End With
- With .Range("a" & r)
- .Font.Bold = True
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlCenter
- End With
- n = 2
- For Each aa In d1(k).keys
- ss = 0
- With .Cells(1, n)
- .Value = aa & "月份"
- .Resize(1, 4).Merge
- End With
- For Each bb In d1(k)(aa).keys
- brr = d1(k)(aa)(bb)
- drr = d2(k)(bb)
- ReDim crr(1 To UBound(brr, 2), 1 To UBound(brr))
- For i = 1 To UBound(brr)
- For j = 1 To UBound(brr, 2)
- crr(j, i) = brr(i, j)
- Next
- Next
- .Cells(drr(0), n).Resize(UBound(crr), UBound(crr, 2)) = crr
- With .Cells(drr(0), n + 3)
- .Resize(drr(1), 1).Merge
- .Value = Application.Sum(Application.Index(crr, 0, 3))
- ss = ss + .Value
- End With
- Next
- drr = d2(k)("合 计")
- .Cells(drr(0), n + 2).Resize(1, 2) = ss
- With .Cells(1, n).Resize(drr(0), 4)
- .Borders.LineStyle = xlContinuous
- .BorderAround LineStyle:=xlContinuous, Weight:=xlMedium
- End With
- n = n + 4
- Next
- With .Rows(1)
- .Font.Bold = True
- .HorizontalAlignment = xlCenter
- .VerticalAlignment = xlCenter
- End With
- End With
- For Each aa In d3(k).keys
- If Not dsh.exists(aa) Then
- Set ws = Worksheets.Add(after:=Worksheets(Worksheets.Count))
- With ws
- .Name = aa
- End With
- End If
- With Worksheets(aa)
- .Cells.Clear
- End With
- m = 1
- For Each bb In d3(k)(aa).keys
- frr = d3(k)(aa)(bb)
- ReDim brr(1 To UBound(frr, 2), 1 To UBound(frr))
- For i = 1 To UBound(frr)
- For j = 1 To UBound(frr, 2)
- brr(j, i) = frr(i, j)
- Next
- Next
- With Worksheets("模板")
- .Range("a6:k25").ClearContents
- .Range("n6:n9").ClearContents
- .Range("l2") = aa
- .Range("l3") = Application.Sum(Application.Index(brr, 0, 11))
- .Range("j3") = DX(.Range("l3"))
- .Range("n6") = Application.Sum(Application.Index(brr, 0, 6)) & "张(份)"
- .Range("n7") = Application.Sum(Application.Index(brr, 0, 7)) & "张(份)"
- .Range("n8") = Application.Sum(Application.Index(brr, 0, 8)) & "张(份)"
- .Range("n9") = Application.Sum(Application.Index(brr, 0, 9)) & "张(份)"
- .Range("a6").Resize(UBound(brr), UBound(brr, 2)) = brr
- .Range("a1:n26").Copy Worksheets(aa).Cells(m, 1)
- End With
- With Worksheets(aa)
- For i = 1 To UBound(hg)
- .Rows(m + i - 1).RowHeight = hg(i)
- Next
- End With
- m = m + 27
- Next
- With Worksheets(aa)
- For j = 1 To UBound(lk)
- .Columns(j).ColumnWidth = lk(j)
- Next
- End With
- Next
- Next
- End Sub
复制代码 |
评分
-
2
查看全部评分
-
|