ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 如何对多表不同格式进行行列不重复值返回并交叉汇总?

如何对多表不同格式进行行列不重复值返回并交叉汇总?

作者:绿色风 分类: 时间:2022-08-18 浏览:93
楼主
liuguansky
Q:如何对多表不同格式进行行列不重复值返回并交叉汇总?
A:用如下代码可以实现[数组+字典]:

  1. Sub justtest()
  2.   Dim drow, dcol, dsum, sht As Worksheet, arrcol, arrrow, arrsum, i&, j&, str1$, arr1, arr2, arr3, str2$, arrre
  3.   Set drow = CreateObject("scripting.dictionary")
  4.   Set dcol = CreateObject("scripting.dictionary")
  5.   Set dsum = CreateObject("scripting.dictionary")
  6.   For Each sht In Worksheets
  7.     If sht.Name <> "統計" Then
  8.       With sht
  9.         arrcol = .Range(.Cells(1, 2), .Cells(1, 2).End(2).Offset(1, 0))
  10.         arrrow = .Range(.Cells(3, 1), .Cells(3, 1).End(4))
  11.         arrsum = .Cells(3, 2).Resize(UBound(arrrow, 1), UBound(arrcol, 2))
  12.         For i = 1 To UBound(arrcol, 2)
  13.           dcol(arrcol(1, i) & vbTab & arrcol(2, i)) = ""
  14.         Next i
  15.         For i = 1 To UBound(arrrow, 1)
  16.           drow(arrrow(i, 1)) = ""
  17.         Next i
  18.         For i = 1 To UBound(arrcol, 2)
  19.           For j = 1 To UBound(arrrow, 1)
  20.             str1 = arrcol(1, i) & vbTab & arrcol(2, i) & vbTab & arrrow(j, 1)
  21.             If dsum.exists(str1) Then
  22.               dsum(str1) = dsum(str1) + arrsum(j, i)
  23.               Else: dsum.Add str1, arrsum(j, i)
  24.             End If
  25.         Next j, i
  26.       End With
  27.     End If
  28.   Next
  29.   With Sheets("統計")
  30.     .Cells.ClearContents
  31.     .[a1:a2] = [{""; "電視大小尺寸"}]
  32.     arr1 = dcol.keys
  33.     .[a3].Resize(drow.Count, 1) = Application.Transpose(drow.keys)
  34.     ReDim arr2(0 To 1, 0 To UBound(arr1))
  35.     For i = 0 To UBound(arr1)
  36.       arr2(0, i) = Split(arr1(i), vbTab)(0)
  37.       arr2(1, i) = Split(arr1(i), vbTab)(1)
  38.     Next i
  39.     .[b1].Resize(2, dcol.Count) = arr2
  40.     arr3 = drow.keys
  41.     ReDim arrre(0 To UBound(arr3), 0 To UBound(arr1))
  42.     For i = 0 To UBound(arr1)
  43.       For j = 0 To UBound(arr3)
  44.         str2 = arr1(i) & vbTab & arr3(j)
  45.         arrre(j, i) = IIf(dsum.exists(str2), dsum(str2), 0)
  46.     Next j, i
  47.     .[b3].Resize(drow.Count, dcol.Count) = arrre
  48.   End With
  49. End Sub

桌面.rar
2楼
JLxiangwei
学习
3楼
wqfzqgk
改变一下横标题,用合并计算最快

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap