|
发表于 2015-6-8 07:03
|
显示全部楼层
本楼为最佳答案
- Sub TranForm加个总计()
- Dim arr, brr, crr, d, d2, d3, d4, i&, j%, zf$
- Set d = CreateObject("scripting.dictionary")
- Set d2 = CreateObject("scripting.dictionary")
- Set d3 = CreateObject("scripting.dictionary")
- Set d4 = CreateObject("scripting.dictionary")
- arr = [b3:f19]
- With CreateObject("vbscript.regexp")
- .Pattern = "[a-zA-Z]+"
- .Global = True
- For i = 1 To UBound(arr)
- d4(arr(i, 1)) = ""
- Set ms = .Execute(arr(i, 1))
- If ms(0) = arr(i, 1) Then
- If Not d.exists(arr(i, 2)) Then d(arr(i, 2)) = ""
- Else
- arr(i, 2) = "区域工序" & Format(Mid(arr(i, 2), 5), "00")
- If Not d2.exists(arr(i, 2)) Then d2(arr(i, 2)) = ""
- End If
- zf = arr(i, 1) & "," & arr(i, 2)
- d3(zf) = d3(zf) + arr(i, 5)
- Next
- End With
- Set rng = Cells(2, Range("k2").Column + d.Count)
- rng.Resize(1, d2.Count) = d2.keys
- rng.Resize(1, d2.Count).Sort rng, Header:=xlGuess, Orientation:=xlLeftToRight, _
- SortMethod:=xlPinYin, DataOption1:=xlSortNormal
- Range("k2").Resize(1, d.Count) = d.keys
- [j2] = "制单号": rng.Offset(0, d2.Count) = "总计"
- brr = [j2].CurrentRegion
- ReDim crr(1 To d4.Count + 1, 1 To UBound(brr, 2))
- a = d4.keys: crr(d4.Count + 1, 1) = "总计"
- For i = 0 To d4.Count - 1
- crr(i + 1, 1) = a(i): s = 0
- For j = 2 To UBound(brr, 2) - 1
- zf = a(i) & "," & brr(1, j)
- crr(i + 1, j) = d3(zf)
- s = s + Val(crr(i + 1, j))
- crr(UBound(crr), j) = crr(UBound(crr), j) + Val(crr(i + 1, j))
- Next
- crr(i + 1, UBound(brr, 2)) = s
- s2 = s2 + s
- Next
- crr(UBound(crr), UBound(crr, 2)) = s2
- [j3].Resize(UBound(crr), UBound(crr, 2)) = crr
- End Sub
复制代码 |
|