You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel VBA中查找指定范围内的所有内部命名区域?

如何查找指定范围内的所有内部命名区域?

假设有三个命名区域:R_1、R_2和R_3,布局如下:
三个命名区域布局示例:R_1位于R_2外部,R_3完全包含在R_2内部

在这个示例中,指定范围为R_2,需要找出所有完全处于该范围内的命名区域(示例中为R_2和R_3)。

初始代码框架如下:

Dim nm As Name

For Each nm In ThisWorkbook.Names
  *** CODE HERE ***
Next nm

我曾尝试使用以下代码:

Dim nm As Name
Dim rng As Range

Set rng = Range("R_2")  '指定范围

For Each nm In ThisWorkbook.Names
    If Not Intersect(rng,Range(nm)) Is Nothing Then
        *** CODE HERE ***
    End If
Next nm

这段代码在没有外部区域时能正常筛选出内部区域,但如果存在像R_1这类与指定范围有交集但实际在外部的区域,仅判断交集的方式就会出现误判。由于命名区域的名称没有统一规律,必须遍历所有命名区域进行精准筛选。


参考建议后,整理出如下可行方案:

Sub Test()
Dim nm As Name
Dim rng As Range

Set rng = Range("R_2") '示例指定范围

For Each nm In ThisWorkbook.Names
    '仅筛选当前工作表中的命名区域
    If nm.RefersToRange.Parent.Name = ActiveSheet.Name Then
        '判断命名区域是否完全包含在指定范围内,且排除指定范围自身
        If isInside(rng, nm) And Not rng.Name = nm Then Debug.Print nm.Name
    End If
Next nm

End Sub


Function isInside(rb As Range, ra As Excel.Name) As Boolean
Dim r As Range
   
Set r = Intersect(ra.RefersToRange, rb)

If Not r Is Nothing Then
    '通过比较单元格总数,判断命名区域是否完全被包含在指定范围内
    isInside = (ra.RefersToRange.Cells.CountLarge = r.Cells.CountLarge)
    Exit Function
End If

End Function

该代码可完成任务,即使遇到边界相邻的区域也能正确识别,示例如下:
边界相邻区域示例

内容的提问来源于stack exchange,提问作者VeRtex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 19:07:33