打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
#Excel VBA#解读(45):查找重叠的单元格区域——Intersect方法

 

如果我们想知道两个单元格区域是否有共同的单元格,或者要知道两个区域中哪些是共有单元格,即两个单元格区域重合的部分,就可以使用Intersect方法。

如下图所示,很容易看出单元格区域A1:C5B3:E8相重合的区域是B3:C5,也就是红色单元格部分。

                           

下面的代码获取上图中两个单元格区域重合的部分,并赋值给变量rngIntersect,最后显示重合区域的单元格地址。

Sub testIntersect1()

    ''声明单元格对象

    Dim rngIntersect As Range

   

    ''获取相重合的交叉区域

    Set rngIntersect =Intersect(Range(''A1:C5''), Range(''B3:E8''))

   

    MsgBox ''A1:C5B3:E8相重合的区域是:''& rngIntersect.Address

End Sub

 

Intersect方法的语法

表达式.Intersect(Arg1,Arg2,Arg3,…,Arg30)

说明:

  • 表达式是一个代表Application对象的变量,表明Intersect方法属于Application对象,在Excel中就是指Excel应用本身。因此,通常在代码中可以省略前面的Application限定,直接书写Intersect。例如我们在本文的示例代码中均省略了前面的Application

  • 必须指定至少两个Range对象作为其参数。

  • 其返回值为Range对象。

 

我们来看看一些例子,进一步了解Intersect方法及其应用。

示例:判断两个单元格区域是否有重合

下面的例子用来判断一个区域是否包含另一个区域,即一个区域是另一个区域的子区域。代码如下:

Sub testIntersect2()

    Dim rng1 As Range, rng2 As Range

    Dim rng As Range

   

    ''设置要测试的两个区域

    Set rng1 = Range(''A1:D9'')

    Set rng2 = Range(''A1:E11'')

   

    ''获取两个区域相重合的区域并存储在变量中

    Set rng = Intersect(rng1, rng2)

   

    ''判断两个区域是否存在重合的区域

    If Not rng Is Nothing Then

        ''判断两个区域之间的包含关系

        If rng.Address = rng1.Address Then

            MsgBox rng2.Address & ''包含''& rng1.Address

        Else

            MsgBox rng1.Address & ''包含''& rng2.Address

        End If

    Else

        MsgBox rng1.Address & '''' &rng2.Address & ''区域无重叠.''

    End If

End Sub

下图为不同区域的测试结果。(目前,我们还没有学习到与用户交互,所以采用“硬编码”的形式直接设置两个区域rng1rng2。)


 

示例:用VBA实现保护单元格功能

下面是《Excel 2007 VBA参考大全》中的一个示例。结合运用Union方法和Intersect方法,禁止用户选择工作表中B1:B5C6:C10这两块单元格区域,这样就可以防止用户修改这两块区域中的数据。代码如下:

Private SubWorksheet_SelectionChange(ByVal Target As Range)

    Dim rngForbidden As Range

   

    ''设置禁止操作的单元格区域

    Set rngForbidden =Union(Range(''B1:B5''), Range(''C6:C10''))

   

    ''如果所选择的单元格没有处于禁止操作的单元格区域中,则退出程序

    If Intersect(Target, rngForbidden) IsNothing Then Exit Sub

   

    ''选择A1并发出警告

    Range(''A1'').Select

    MsgBox ''不能选择'' &rngForbidden.Address & ''中的单元格.'', vbCritical

End Sub

每当用户在与包含该事件过程的模块相关联的工作表中选择单元格区域时,就会触发工作表的Worksheet_SelectionChange事件过程。代码中,首先使用Union方法定义了由两个非连续单元格区域组成的禁止操作的区域,然后使用Intersect方法检查所选择的区域与禁止操作的区域是否有重合,并作为If语句的判断条件,如果没有重合则退出事件过程,用户正常操作,并不会感觉到什么;如果有重合,则光标定位到单元格A1并给出一条警告消息。

注:简单地说,工作表事件就是用户操作工作表时,工作表做出的相应响应。关于工作表事件将在以后详细介绍。

 

--------------------------------------

 

本文属原创文章,转载请联系我或者注明出处。

 

关注《完美Excel》微信公众账号:

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
VBA判断Excel选择区域是否有合并单元格
Excel VBA 8.13不同数据合并单元会导致数据缺失?今天帮你解决这个问题
Excel VBA与数据统计 第四章 对象
完全手册Excel VBA典型实例大全:通过368个例子掌握
Excel之VBA常用功能应用篇:批量增加批注的逆操作,批量删除
VBA对话输入框选取指定列获取列号
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服