VBA之Excel应用第十节:用Union和Intersect方法获得单元格区域

《VBA之Excel应用》(版权10178983)是非常经典的,是我推出的第七套教程,定位于初级,目前是第一版修订。这套教程从简单的录制宏开始讲解,一直到窗体的搭建,内容丰富,实例众多。大家可以非常容易的掌握相关的知识,这套教程共三册,十七章,都是我们在利用EXCEL工作过程中需要掌握的知识点,希望大家能掌握利用。今日讲解的内容是:VBA之Excel应用第四章第十节:用Union和Intersect方法获得单元格区域

【分享成果,随喜正能量】347每个人的认知都有局限,你以为错的,它却是对的,你以为对的,它却是错的,因此不要去嘲讽别人,因为你所嘲讽的,往往是你自己的无知。

第四章 单元格(Range)对象

大家好,我们这章开始学习单元格对象。单元格(Range)对象是Excel VBA中最重要的对象之一。本章概述了Range对象的属性和方法,包括如何声明一个单元格对象,如何选择单元格对象,以及对行、列的操作,还讲解了如何对单元格进行复制、粘贴、清除、计数,以及对当前区域CurrentRegion的讲解,还涉及到单元格的联合与交叉等。通过这章的学习,大家会更清楚地看到VBA的结构,以及在实际工作中VBA的综合利用。

第十节 用Union和Intersect方法获得单元格区域

大家好,我们在前几节详细介绍了单元格区域的扩展,这些扩展都是基于一个基准单元格来执行的操作。这讲我们讲解Union和Intersect方法,获取的也是一个单元格区域,但这种方法是基于两个基准的操作。下面我们来讲解这两种方法。

1 Application.Union 方法

这种方法返回两个或多个区域的合并区域。

语法:expression.Union (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)

expression:表示 Application 对象的变量。

参数:

① Arg1 必需 Range类型 必须至少指定两个 Range 对象。

② Arg2 必需 Range类型 必须至少指定两个 Range 对象。

③ Arg3-- Arg30 可选 Variant类型 一个区域。

2 Application.Intersect方法

返回一个Range对象,该对象表示两个或多个区域的矩形交集。如果指定了不同工作表中的一个或多个区域, 则返回错误。

语法:expression.Intersect (Arg1, Arg2, Arg3, Arg4, Arg5, Arg6, Arg7, Arg8, Arg9, Arg10, Arg11, Arg12, Arg13, Arg14, Arg15, Arg16, Arg17, Arg18, Arg19, Arg20, Arg21, Arg22, Arg23, Arg24, Arg25, Arg26, Arg27, Arg28, Arg29, Arg30)

expression:表示 Application 对象的变量。

参数:

① Arg1 必需 Range类型 重叠的区域。 必须至少指定两个 Range 对象。

② Arg2 必需 Range类型 重叠的区域。 必须至少指定两个 Range 对象。

③ Arg3--Arg30 可选 Variant类型 一个相交区域。

3 Union和Intersect方法的应用示例

此示例将 Worksheet.Range 属性、Application.Union 方法和 Application.Intersect 方法进行比较。

Range("A1:A10").Select

Range(Range("A1"), Range("A10")).Select

Range("A1, A10").Select

Union(Range("A1"), Range("A10")).Select

Range("A1:A5 A5:A10").Select

Intersect(Range("A1:A5"), Range("A5:A10")).Select

  • 对于以上的示例代码,我们逐个分析一下结果:

1)Range("A1:A10").Select, 将选择A1到A10的连续区域

2)Range(Range("A1"), Range("A10")).Select ,和上面的Range("A1:A10").Select返回结果相同。

3)Range("A1, A10").Select,将选择A1和A10两个单元格

4)Union(Range("A1"), Range("A10")).Select 将选择A1和A10两个单元格

5)Range("A1:A5 A5:A10").Select 将选择A5一个单元格

6)Intersect(Range("A1:A5"), Range("A5:A10")).Select 将选择A5一个单元格

不知大家对上述结果是否理解呢?

4 Union和Intersect方法的实例应用

通过以上的讲解,我们了解到:Excel VBA中的Union方法返回一个Range对象,该对象表示两个或多个范围的并集;Excel vba中的Intersect方法返回一个Range对象,该对象表示两个或多个范围的交集。

为了更好地说明Union和Intersect方法,我们看下面的实例应用:

实例一:如下面的截图,要求利用Union实现"VBA"单元格的选择:

我们看实现的代码:

Sub mynzR() 'Union和Intersect方法的实例应用1

Dim myRange As Range, mycell As Range, myTEM As Range

I = 0

Set myRange = Range("a1").CurrentRegion

For Each mycell In myRange

If mycell.Value = "VBA" Then

I = I + 1

If I = 1 Then

Set myTEM = mycell

Else

Set myTEM = Union(myTEM, mycell)

End If

End If

Next

myTEM.Select

End Sub

代码截图:

代码讲解:

1) Set myRange = Range("a1").CurrentRegion 将以A1为基准的单元格区域赋给变量myRange。

2)For Each mycell In myRange

If mycell.Value = "VBA" Then

I = I + 1

If I = 1 Then

Set myTEM = mycell

Else

Set myTEM = Union(myTEM, mycell)

End If

End If

Next

在myRange中建立一个遍历循环,如果单元格的值为VBA就将这个单元格加入一个单元格的区域myTEM。

3)If I = 1 Then

Set myTEM = mycell

这是给变量myTEM 赋初始值。

下面看实现的效果:

实例二:仍是上面的截图,要求利用Intersect方法实现右下角值为"NZ"单元格的选择:

我们看下面的代码:

Sub mynzS() 'Union和Intersect方法的实例应用2

Dim myRange As Range, mycell As Range, myTEM As Range

'Set myRange = Range("a1:E12")

Set myRange = Range("a1").CurrentRegion

Set mycell = Range("D7:H12")

Set myTEM = Intersect(myRange, mycell)

myTEM.Select

End Sub

代码截图:

代码讲解:

1) 上述代码首先命名了两个单元格区域myRange和mycell,然后利用Intersect方法进行处理。

2) 对于myRange的区域,我给出了两个语句:

'Set myRange = Range("a1:E12")

Set myRange = Range("a1").CurrentRegion

都是可以用的。

下面看代码的运行结果:

今日内容回向:

1) Union和Intersect方法的意义是什么,有什么作用?

2) 要充分理解这两种方法的语法解释示例。

本讲内容参考程序文件:工作簿04.xlsm

我20多年的VBA成果全在下面的资料中:

相关推荐
klzdwydz1 小时前
注解与反射
java·开发语言
ULTRA??1 小时前
C语言简化版本开辟动态内存的万能MALLOC宏封装
c语言·开发语言
talenteddriver2 小时前
java: 分页查询(自用笔记)
java·开发语言
繁华似锦respect2 小时前
lambda表达式中的循环引用问题详解
java·开发语言·c++·单例模式·设计模式·哈希算法·散列表
我要升天!2 小时前
QT -- 网络编程
c语言·开发语言·网络·c++·qt
Unlyrical2 小时前
为什么moduo库要进行线程检查
linux·服务器·开发语言·c++·unix·muduo
GIS阵地2 小时前
Qt实现简易仪表盘
开发语言·c++·qt·pyqt·qgis·qt5·地理信息系统
ModestCoder_2 小时前
强化学习 Policy 的 Tracking 能力全解析,以Legged_gym为例解说Policy的训练流程
人工智能·算法·自然语言处理·机器人·具身智能
天天摸鱼的小学生2 小时前
【Java Enum枚举】
java·开发语言