ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 当合并单元格、union、select这三个遇到一起会发生什么?

当合并单元格、union、select这三个遇到一起会发生什么?

作者:绿色风 分类: 时间:2022-08-18 浏览:96
楼主
yjzstar
已知有如下信息:

 
其中[A2:A5];[A6:B6];[A7:F7]是三个独立的合并单元格区域,先用以下代码完成搜索表中的所有合并单元格,并要求全部选中:
  1. Sub 查找合并单元()
  2.     Dim rng As Range
  3.     Dim rng1 As Range
  4.     For Each rng In ActiveSheet.UsedRange
  5.         If rng.MergeCells Then
  6.             If rng1 Is Nothing Then
  7.                 Set rng1 = rng
  8.             Else
  9.                 Set rng1 = Union(rng1, rng)
  10.             End If
  11.         End If
  12.     Next
  13.     If Not rng1 Is Nothing Then rng1.Select
  14. End Sub
我们预计的结果是:

 
但实际得到的结果却是:

 
实际是把[A2:F7]全部选中了,而不是原来的三个区域单独选中,可见这并不是我们想要的结果!
那么产生这种情况的原因是什么呢?
首先我们来看rng的值,for语句用rng来遍历已用的单元格区域,即遍历[A1:F7],他的运动方式是自左向右,之上而下的,即一行一行的按照先后顺序读取数据。rng.MergeCells用来判断当前的单元格是否包含合并单元格,如果有包含合并单元格则用Union合并到rng1中。
所以随这个整个FOR循环的执行,rng1的地址变化如下:

 
最终rng1的地址为:[A2:A7];[B6:B7];[C7:F7],而不是我们想的[A2:A5];[A6:B6];[A7:F7]。
最后对rng1([A2:A7];[B6:B7];[C7:F7])进行select的过程用鼠标模仿选择效果如下:

 
综上所述是否让你看清了在某些情况下合并单元格、union、select这三个遇到一起时会发生的一切!
对以上代码改进如下,便可以轻轻松松的改变这一切的发生:
  1. Sub 查找合并单元()
  2.     Dim rng As Range
  3.     Dim rng1 As Range
  4.     For Each rng In ActiveSheet.UsedRange
  5.         If rng.MergeCells Then
  6.             If rng1 Is Nothing Then
  7.                 Set rng1 = rng
  8.             Else
  9.                 Set rng1 = Union(rng1, rng.MergeArea)
  10.             End If
  11.         End If
  12.     Next
  13.     If Not rng1 Is Nothing Then rng1.Select
  14. End Sub
以上代码让你轻轻松松找到当前表格中所有存在的合并单元格!
这段代码与第一段代码的唯一不同点是union中的项目,前者单纯用的是rng,而后再则用的是rng.MergeArea,即rng所在的合并单元格区域!这样微小的变化彻底的改变了union合并的过程,前者是以单元格为单元写入合并的,而后者则是以单元格所在的区域为单位写入合并的,进而导致了结果的完全不同!
第二段代码解析:
用FOR循环语句让rng指向当前工作表中每个已用的单元格;
用rng.MergeCells判断rng是否包含合并单元格,如果是则返回TRUE,并用union方法将这个rng所在的合并区域合并到rng1中;
最后当rng遍历所有已用单元格之后,如果存在合并单元格,这用select方法进行选中。
代码相对简单,但有时候往往一不留神就得不到我们所要的结果!

销售公司当月销售情况表111.zip
2楼
bluexuemei
学习,值得注意!
3楼
xyf2210
不错
4楼
wqfzqgk
查找格式,呵呵
5楼
wqfzqgk
查找格式,呵呵

免责声明

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

评论列表
sitemap