如何在Excel VBA中查找指定范围内的所有内部命名区域?
如何查找指定范围内的所有内部命名区域?
假设有三个命名区域:R_1、R_2和R_3,布局如下:
在这个示例中,指定范围为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
相关产品推荐
相关产品推荐

