专栏名称: 完美Excel
Excel与VBA技术学习与实践
目录
相关文章推荐
Excel之家ExcelHome  ·  AI赋能,效率倍增 ·  18 小时前  
Excel之家ExcelHome  ·  LOOKUP函数,这些用法会不会? ·  18 小时前  
Excel之家ExcelHome  ·  COUNTIF函数的几个典型用法 ·  18 小时前  
完美Excel  ·  Excel日期计算技巧 ·  4 天前  
Excel之家ExcelHome  ·  数据查询顶呱呱,月入三千笑哈哈 ·  4 天前  
51好读  ›  专栏  ›  完美Excel

改进的Union函数

完美Excel  · 公众号  · Excel  · 2025-01-17 05:56

正文

学习Excel技术,关注微信公众号:
excelperfect

标签:VBA

VBAUnion方法将两个单元格区域合并成单个单元格区域,例如:

Dim rng As RangeSet rng = Application.Union(Range("A1:A5"), Range("B1:B5"))

将单元格区域A1:A5B1:B5合并成单个的单元格区域rng,其代表区域A1:B5

然而,Union方法有两个缺点:

1.其输入参数不能是Nothing。如果任意参数为Nothing,则Union操作失败。

2.当输入参数指定的区域重叠时,它会复制单元格。这可能会导致代码中的逻辑问题,因为重叠的单元格在Union结果中包含了两次。

下面改进的Union函数允许传递的参数值为Nothing

'Union操作接受参数为NothingFunction Union1(ParamArray Ranges() As Variant) As Range Dim lng As Long Dim rng As Range For lng = LBound(Ranges) To UBound(Ranges)   If IsObject(Ranges(lng)) Then     If Not Ranges(lng) Is Nothing Then       If TypeOf Ranges(lng) Is Excel.Range Then         If Not rng Is Nothing Then           Set rng = Application.Union(rng, Ranges(lng))         Else           Set rng = Ranges(lng)         End If       End If     End If   End If Next lng Set Union1 = rngEnd Function

下面改进的Union函数处理合并时的重叠区域单元格。

' 当单元格区域有重叠时' 不会复制重叠区域的单元格' 需要使用Union1函数Function ProperUnion(ParamArray Ranges() As Variant) As Range Dim rngRes As Range Dim lng As Long Dim rng As Range
 If Not Ranges(LBound(Ranges)) Is Nothing Then Set rngRes = Ranges(LBound(Ranges)) End If For lng = LBound(Ranges) + 1 To UBound(Ranges) If Not Ranges(lng) Is Nothing Then For Each rng In Ranges(lng).Cells       If Application.Intersect(rngRes, rng) Is Nothing Then         Set rngRes = Union1(rngRes, rng) End If Next rng End If Next lng Set ProperUnion = rngResEnd Function

注:本文程序学习整理自cpearson.com,供参考。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。
欢迎到知识星球:完美Excel社群,进行技术交流和提问,获取更多电子资料,并通过社群加入专门的微信讨论群,更方便交流。

推荐文章
Excel之家ExcelHome  ·  AI赋能,效率倍增
18 小时前
Excel之家ExcelHome  ·  LOOKUP函数,这些用法会不会?
18 小时前
Excel之家ExcelHome  ·  COUNTIF函数的几个典型用法
18 小时前
完美Excel  ·  Excel日期计算技巧
4 天前
Excel之家ExcelHome  ·  数据查询顶呱呱,月入三千笑哈哈
4 天前