ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 113|回复: 4

VBA合并单元格有几种方法?

[复制链接]

TA的精华主题

TA的得分主题

发表于 2024-5-6 22:27 | 显示全部楼层 |阅读模式


image.png


  1. Sub Macro1()
  2.    Application.DisplayAlerts = False
  3.    Dim Sht As Worksheet
  4.        Set Sht = Sheet2
  5.    Dim Rng As Range, oRng As Range
  6.    Dim Str As String
  7.    Dim ii: ii = 1
  8.        Set Rng = Sht.Cells(20, 1).CurrentRegion
  9.        Debug.Print Rng.Address
  10.        For jj = 1 To 3
  11.            Set oRng = Rng(ii, jj)
  12.            For ii = 1 To Rng.Rows.Count
  13.                ''
  14.                If Rng(ii, jj) = Rng(ii + 1, jj) Then
  15.                    Set oRng = Union(oRng, Rng(ii, jj))
  16.                ElseIf Rng(ii, jj) <> Rng(ii + 1, jj) Then
  17.                    'Debug.Print oRng(2, 1).Resize(oRng.Rows.Count).Address
  18.                    'oRng(2, 1).Resize(oRng.Rows.Count).Merge
  19.                    Debug.Print oRng.Address
  20.                    oRng.Merge
  21.                    Set oRng = Rng(ii, jj)
  22.                End If
  23.            Next ii
  24.            ii = 1
  25.        Next jj
  26.        Application.DisplayAlerts = True
  27. End Sub
复制代码


Book2.rar

14.25 KB, 下载次数: 11

TA的精华主题

TA的得分主题

发表于 2024-5-7 09:47 | 显示全部楼层
楼主要解决什么问题?现有代码有什么问题?

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-7 10:04 | 显示全部楼层
taller 发表于 2024-5-7 09:47
楼主要解决什么问题?现有代码有什么问题?

合并单元格式是不是只有Union(oRng, Rng(ii, jj))一种方法.

字典方法是否可以?

不用Union,如何确定合并单元的Address??

TA的精华主题

TA的得分主题

发表于 2024-5-7 10:39 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
合并单元格最佳方式就是Union,使用单元格地址的方法,如果对于少量单元格是可行的,但是Range(...)参数有255个字符的限制,也就是说单元格地址字符串长度不能超过255

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-5-7 14:32 | 显示全部楼层
本帖最后由 ning84 于 2024-5-7 15:28 编辑
taller 发表于 2024-5-7 10:39
合并单元格最佳方式就是Union,使用单元格地址的方法,如果对于少量单元格是可行的,但是Range(...)参数有 ...

谢谢回复,琢磨用字典方法,首先计算出重复单元格
set Rng= orng.resiz(重复数,1)
Rng.Union


vba字典重复key_字典(Dictionary),在VBA语言中的应用-CSDN博客
https://blog.csdn.net/weixin_39556811/article/details/111679149

采用字典方法必须要两次循环, Union方法是最佳方法.


  1. Sub ll()
  2.    Dim Kk As Integer
  3.    Dim Dict As Dictionary
  4.        Set Dict = New Dictionary
  5.    Dim Arr: Arr = Array("bb", "aa", "aa", "bb", "cc", "aa", "bb", "cc", "aa", "bb", "cc", "aa")
  6.        For ii = 0 To UBound(Arr)
  7.             Dict(Arr(ii)) = ""
  8.        Next ii
  9.       
  10.        For ii1 = 0 To Dict.Count - 1
  11.          For ii = 0 To UBound(Arr)
  12.            If Dict.Keys(ii1) = Arr(ii) Then
  13.                Kk = Kk + 1
  14.                'Debug.Print Kk
  15.            End If
  16.          Next ii
  17.          Debug.Print Dict.Keys(ii1), "///", Kk
  18.          Kk = 0
  19.          Stop
  20.        Next ii1
  21. End Sub
复制代码


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-27 14:45 , Processed in 0.035808 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表