ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 统计多数据列中数据于源数据区出现次数技巧及多数据列代码缩减技巧

统计多数据列中数据于源数据区出现次数技巧及多数据列代码缩减技巧

作者:绿色风 分类: 时间:2022-08-18 浏览:103
楼主
kevinchengcw
如果需要对比数据列的数据列数多而且列数值不固定,按照常规写法通常会要写出长长的代码,下面介绍一种可以有效简缩代码的方式:将对应列及列数值放入数组调用。同时配以字典查找重复的方式可以用于快速统计此类问题,代码如下:
  1. Sub test()
  2. Dim Dic, Arr, Col, Wid
  3. Dim M, N, I, T, C As Long
  4. Dim Str As String
  5. Application.ScreenUpdating = False  '关闭屏幕刷新,加快处理速度
  6. Set Dic = CreateObject("scripting.dictionary")   '建立字典用于存放源数据
  7. For N = 2 To Cells(Rows.Count, 1).End(3).Row  '循环源数据区各行
  8.     T = WorksheetFunction.CountBlank(Cells(N, 1).Resize(1, 6))  '判断源数据区的6列里空了几个单元格(因源数据区是用公式生成的,故用counta会判断不准确)
  9.     Dic.Add N - 1, Join(Application.Transpose(Application.Transpose(Cells(N, 1).Resize(1, 6 - T).Value)), ",")  '将源数据有值的区域用join函数串接后添加到字典中
  10. Next N
  11. Col = Array(8, 26, 36, 44, 49)  '建立要分析的数据列起始列号的数组
  12. Wid = Array(5, 6, 4, 3, 2)   '建立要分析的各数据列列数的数组
  13. Arr = Dic.keys  '将字典的keys赋值给字典,方便取用
  14. For N = 3 To Range(Cells(1, 8), Cells(Rows.Count, Columns.Count)).SpecialCells(xlCellTypeLastCell).Row  '循环要判断的数据区开始行到整个区域的最后一行
  15.     For C = LBound(Col) To UBound(Col)  '取出数据区各个数据列的起始列号
  16.         I = 0  '初始化记录重复数量的变量的值为0
  17.         T = WorksheetFunction.CountA(Cells(N, Col(C)).Resize(1, Wid(C)))  '判断对应数据列的数据个数
  18.         If T > 0 Then  '如果数据列的当前行不为空,则进行下面判断
  19.             Str = Join(Application.Transpose(Application.Transpose(Cells(N, Col(C)).Resize(1, Wid(C)))), ",")  '将数据列当前行的数据用join串接
  20.             For M = LBound(Arr) To UBound(Arr)  '与字典中的各个item项进行比较
  21.                 If Str = Dic(Arr(M)) Then I = I + 1  '如果与item项值相等,则重复的记录加1
  22.             Next M
  23.             Cells(N, Col(C)).Offset(0, Wid(C)) = I  '将最终的比较结果写到记录个数的单元格中
  24.         End If
  25.     Next C  '循环到下一数据列
  26. Next N  '下一行数据
  27. Application.ScreenUpdating = True   '打开屏幕刷新
  28. MsgBox "处理完成", vbOKOnly, ""   '显示提示消息
  29. End Sub

以上为统计完全一致的情况的代码,将判断语句改成下面这句即可以判断包含的情况了
  1. If Dic(Arr(M)) Like "*" & Str & "*" Then I = I + 1  '利用like语句判断字符串位于其中的次数

附示例文件。
数据的统计.rar
2楼
い卋玑┾宝珼
听说K版是VBA大牛,过来学习

免责声明

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

评论列表
sitemap