ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何利用VBA字典合并单元格同类项

如何利用VBA字典合并单元格同类项

作者:绿色风 分类: 时间:2022-08-17 浏览:168
楼主
芐雨
Q:如何利用VBA字典合并单元格同类项
A:

 

上面列举了合并的三种规则:
1.单元格上下左右相邻的值相等就合并,顺序先行后列----代码09行
2.单元格上下相邻的值相等合并(列方向)----代码10行
3.单元格左右相邻的值相等合并(行方向)----代码11行

PS:比较常用的是列方向和行方向的合并,大家可以根据图和代码来对比三种规则的不同之处

代码如下:
  1. Sub 利用字典合并同类项_芐雨()
  2.     Dim rng As Range, rg As Range, d As Object
  3.     Application.ScreenUpdating = False
  4.     Application.DisplayAlerts = False
  5.     Range("A11:E17").Copy Range("A1:E7")
  6.     Set rng = Range("A1:E7")
  7.     Set d = CreateObject("scripting.dictionary")
  8.     For Each rg In rng
  9.         s = rg.Value               '等于单元格rg的值
  10.         ' s = rg.Value & "#" & rg.Column    '等于单元格rg的值&"#"&rg的列号
  11.         ' s = rg.Value & "#" & rg.Row  '等于单元格rg的值&"#"&rg的行号
  12.         If d.exists(s) Then    '存在执行连接单元格对象
  13.             Set d(s) = Union(d(s), rg)
  14.         Else
  15.             Set d(s) = rg    '不存在等于单元格对象
  16.         End If
  17.     Next
  18.     For Each ky In d.keys   '遍历所有字典并合并单元格
  19.         d(ky).Merge
  20.     Next
  21.     rng.Borders.LineStyle = 1   '边框
  22.     rng.HorizontalAlignment = xlCenter    '左右居中对齐
  23.     rng.VerticalAlignment = xlCenter     '上下居中对齐
  24.     Application.ScreenUpdating = True
  25.     Application.DisplayAlerts = True
  26. End Sub


重要代码详解:
1、字典可以是一个值,也可以是对象。rg表示一个单元格
给普通变量赋值,可以直接等于:d(s)=rg,等于Range的值
给对象变量赋值使用SET,  Set d(s) = rg ,也就是说d(s)是一个Range。   

     
2、利用字典的去重功能,把重复的数值的单元格对象利用Union合并在一起
如果要单元格上下左右相邻的值相等就合并,s = rg.Value,等于单元格rg的值,
如果只需列或行方向相邻的值相等才合并,加个列号或行号就以区分就可以了,详细见代码10,11行。
  1.           s = rg.Value               '等于单元格rg的值
  2.         ' s = rg.Value & "#" & rg.Column    '等于单元格rg的值&"#"&rg的列号
  3.         ' s = rg.Value & "#" & rg.Row  '等于单元格rg的值&"#"&rg的行号
  4.         If d.exists(s) Then    '存在执行连接单元格对象
  5.             Set d(s) = Union(d(s), rg)
  6.         Else
  7.             Set d(s) = rg    '不存在等于单元格对象
  8.         End If

3、遍历所有字典并合并单元格,利用key值遍历所有字典。
其中d(ky)可以是一个单元格对象,也可以由多个单元格或单元格区域组成的区域,直接用Merge合并单元格(效果等同于用Ctrl选取多个单元格区域,再按合并单元。)

  1. For Each ky In d.keys   '遍历所有字典并合并单元格
  2.         d(ky).Merge
  3. Next


附件:

利用字典合并同类项_芐雨.zip






免责声明

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

评论列表
sitemap