点击文件名下载附件
[求助]求分类统计代码
Sub MySum() Dim ArrYS, ArrJG, i&, j%, K&, L&, XLTemp&, d As Object ArrYS = Range("D2:S" & Range("D65536").End(xlUp).Row) ReDim ArrJG(1 To 16, 0 To 1) K = 0 ArrJG(1, 0) = "合计" Set d = CreateObject("SCRIPTING.DICTIONARY") For i = 1 To UBound(ArrYS, 1) If InStr(1, ArrYS(i, 1), "小计") > 0 Or InStr(1, ArrYS(i, 1), "合计") > 0 Then Range("D" & i + 1 & ":F65536").Clear Exit For End If If Not d.exists(ArrYS(i, 1)) Then K = K + 1 d(ArrYS(i, 1)) = K ReDim Preserve ArrJG(1 To 16, 0 To K) ArrJG(1, K) = ArrYS(i, 1) & "小计" End If XLTemp = d(ArrYS(i, 1)) For j = 2 To 16 If j <> 10 Then ArrJG(j, XLTemp) = ArrJG(j, XLTemp) + ArrYS(i, j) ArrJG(j, 0) = ArrJG(j, 0) + ArrYS(i, j) End If Next j Next Range("D" & Range("D65536").End(xlUp).Row + 1).Resize(UBound(ArrJG, 2) + 1, UBound(ArrJG, 1)) = Application.Transpose(ArrJG) Range("D" & i + 1 & ":S" & i + 1).Cut Range("D" & Range("D65536").End(xlUp).Row + 1).Insert Shift:=xlDown End Sub
点击文件名下载附件
[求助]求分类统计代码
Sub 统计() Dim Dic As New Dictionary Dim Arr, Sy, dR_n&, i&, k&, N&, N1!, N2!, S$ Dim Ay() As Single dR_n = [d65536].End(xlUp).Row If Cells(dR_n, 4) = "合计" Then Exit Sub Arr = Range("D2:F" & dR_n) For i = 1 To UBound(Arr) S = Arr(i, 1) & "小计" If Dic.Exists(S) Then Sy = Split(Dic(S), "+") Sy(0) = Sy(0) + Arr(i, 2) Sy(1) = Sy(1) + Arr(i, 3) Dic(S) = Join(Sy, "+") Else Dic.Add Arr(i, 1) & "小计", Arr(i, 2) & "+" & Arr(i, 3) End If Next i k = Dic.Count ReDim Ay(1 To k, 1 To 2) For i = 1 To k Sy = Split(Dic.Items(i - 1), "+") Ay(i, 1) = Sy(0) Ay(i, 2) = Sy(1) N1 = N1 + Sy(0) N2 = N2 + Sy(1) Next i N = dR_n + 1 Cells(N, 4).Resize(k, 1) = Application.Transpose(Dic.Keys) Cells(N, 5).Resize(k, 2) = Ay Cells(N + k, 4) = "合计" Cells(N + k, 5) = N1 Cells(N + k, 6) = N2 End Sub
点击文件名下载附件
[求助]求分类统计代码
Sub MySum() Dim ArrYS, ArrJG, i&, j%, K&, L&, XLTemp&, d As Object ArrYS = Range("D2:F" & Range("D65536").End(xlUp).Row) ReDim ArrJG(1 To 3, 0 To 1) K = 0 ArrJG(1, 0) = "合计" Set d = CreateObject("SCRIPTING.DICTIONARY") For i = 1 To UBound(ArrYS, 1) If InStr(1, ArrYS(i, 1), "小计") > 0 Or InStr(1, ArrYS(i, 1), "合计") > 0 Then Range("D" & i + 1 & ":F65536").Clear Exit For End If If Not d.exists(ArrYS(i, 1)) Then K = K + 1 d(ArrYS(i, 1)) = K ReDim Preserve ArrJG(1 To 3, 0 To K) ArrJG(1, K) = ArrYS(i, 1) & "小计" End If XLTemp = d(ArrYS(i, 1)) For j = 2 To 3 ArrJG(j, XLTemp) = ArrJG(j, XLTemp) + ArrYS(i, j) ArrJG(j, 0) = ArrJG(j, 0) + ArrYS(i, j) Next j Next Range("D" & Range("D65536").End(xlUp).Row + 1).Resize(UBound(ArrJG, 2) + 1, 3) = Application.Transpose(ArrJG) Range("D" & i + 1 & ":F" & i + 1).Cut Range("D" & Range("D65536").End(xlUp).Row + 1).Insert Shift:=xlDown End Sub
点击文件名下载附件
[求助]求分类统计代码
Sub MySum() Dim ArrYS, ArrJG, i&, j%, K&, L&, XLTemp&, d As Object ArrYS = Range("D2:S" & Range("D65536").End(xlUp).Row) ReDim ArrJG(1 To 16, 0 To 1) K = 0 ArrJG(1, 0) = "合计" Set d = CreateObject("SCRIPTING.DICTIONARY") For i = 1 To UBound(ArrYS, 1) If InStr(1, ArrYS(i, 1), "小计") > 0 Or InStr(1, ArrYS(i, 1), "合计") > 0 Then Range("D" & i + 1 & ":F65536").Clear Exit For End If If Not d.exists(ArrYS(i, 1)) Then K = K + 1 d(ArrYS(i, 1)) = K ReDim Preserve ArrJG(1 To 16, 0 To K) ArrJG(1, K) = ArrYS(i, 1) & "小计" End If XLTemp = d(ArrYS(i, 1)) For j = 2 To 16 If j <> 10 Then ArrJG(j, XLTemp) = ArrJG(j, XLTemp) + ArrYS(i, j) ArrJG(j, 0) = ArrJG(j, 0) + ArrYS(i, j) End If Next j Next Range("D" & Range("D65536").End(xlUp).Row + 1).Resize(UBound(ArrJG, 2) + 1, UBound(ArrJG, 1)) = Application.Transpose(ArrJG) Range("D" & i + 1 & ":S" & i + 1).Cut Range("D" & Range("D65536").End(xlUp).Row + 1).Insert Shift:=xlDown End Sub
点击文件名下载附件
[求助]求分类统计代码
Sub 统计() Dim Dic As New Dictionary Dim Arr, ArrR, ArrM, Ay, By, dR_n&, mR_n&, i&, j%, k&, S$ Dim Cy(1 To 1, 1 To 15) As Single dR_n = [d65536].End(xlUp).Row mR_n = [m65536].End(xlUp).Row If Cells(dR_n, 4) = "合计" Then Exit Sub Arr = Range("D2:D" & dR_n) ArrR = Range("E2:S" & dR_n) ArrM = Range("M2:M" & mR_n) For i = 1 To UBound(Arr) S = Arr(i, 1) & "小计" Ay = Application.Index(ArrR, i) If Dic.Exists(S) Then By = Dic(S) For j = 1 To 15 If j <> 9 Then By(j) = By(j) + Ay(j) Next j Dic(S) = By Else Dic.Add S, Ay End If For j = 1 To 15 If j <> 9 Then Cy(1, j) = Cy(1, j) + Ay(j) Next j Next i k = Dic.Count Cells(dR_n + 1, 4).Resize(k, 1) = Application.Transpose(Dic.Keys) For i = 1 To k Cells(dR_n + i, 5).Resize(1, 15) = Dic.Items(i - 1) Next i N = dR_n + 1 Cells(N + k, 4) = "合计" Cells(N + k, 5).Resize(1, 15) = Cy Range("M2:M" & mR_n).Value = ArrM End Sub