Vba 如何检查命名范围是否在当前范围内?
我知道如何命名一系列单元格Vba 如何检查命名范围是否在当前范围内?,vba,excel,Vba,Excel,我知道如何命名一系列单元格 例如,如果A1到B2被命名为RangeA,我选择A1到C2,我是否可以判断RangeA是否在其中?以下是一些代码,可以帮助您进行操作: Sub test() Dim r1 As Range, r2 As Range, r3 As Range Set r1 = Range("A1:A5") Set r2 = Range("A3:A6") Set r3 = Application.Intersect(r1, r2) If Not r3 Is Nothing Then
例如,如果A1到B2被命名为RangeA,我选择A1到C2,我是否可以判断RangeA是否在其中?以下是一些代码,可以帮助您进行操作:
Sub test()
Dim r1 As Range, r2 As Range, r3 As Range
Set r1 = Range("A1:A5")
Set r2 = Range("A3:A6")
Set r3 = Application.Intersect(r1, r2)
If Not r3 Is Nothing Then
If r3.Cells.Count = r2.Cells.Count Then
MsgBox "there is a complete intersection"
Else
MsgBox "there is some overlap"
End If
Else
MsgBox "there is no overlap"
End If
End Sub
应该是不言自明的。并向@TimWilliams致敬,他发表了一条关于这些内容的评论
根据您对要求的澄清进行更新
Sub getIntersectingNames(r As Range)
For Each Nm In ActiveWorkbook.Names
If Not Application.Intersect(r, Range(Nm)) Is Nothing Then
MsgBox Nm.Name & " intersects"
End If
Next
End Sub
Sub test()
' pop up a message box for every range that intersects cell B2:
getIntersectingNames [B2]
End Sub
Function listIntersectingNames(r As Range)
Dim result() As String
ReDim result(1 To ActiveWorkbook.Names.Count)
Dim matchCount As Integer
matchCount = 0
For Each Nm In ActiveWorkbook.Names
If Not Application.Intersect(r, Range(Nm)) Is Nothing Then
matchCount = matchCount + 1
result(matchCount) = Nm.Name
End If
Next
ReDim Preserve result(1 To matchCount)
listIntersectingNames = result
End Function
Sub test2()
' return an array of names of all ranges that intersect cell B3:
ans = listIntersectingNames([B3])
s = ""
For Each r In ans
s = s & r & vbCrLf
Next
MsgBox s
End Sub
我不太清楚您希望如何返回一个姓名列表,因此我在上面给出了几个选项。让我知道您是否可以将此应用于您的情况,或者您是否需要更多信息?进一步扩展Tim和Floris所说的内容,请参见以下内容:
Dim myNamedRange As Range, mySelection As Range, myIntersect As Range
Set mySelection = Selection '~~> gets your selection
Set myNamedRange = Range("RangeA") '~~> can be declared or directly pass to Intersect
Set myIntersect = Intersect(mySelection, myNamedRange)
'~~> Then use intersect
If Not myIntersect Is Nothing Then
If myIntersect.Address = myNamedRange.Address Then
MsgBox "Your named range is within your selection."
Else
MsgBox "Your named range is beyond your selection."
End If
Else
MsgBox "Your named range is beyond your selection."
End If
End Sub
这是基于您的实际问题,将命名范围a与选择进行比较。
希望这能有所帮助。看看应用程序。Intersect@TimWilliams我冒昧地把你的评论扩展成一个答案…@TimWilliams这太棒了,如果我不知道RangeA的话,我更想知道。类似于查看选择中的所有命名范围。对不起,我不清楚。不管怎样,这对我都有帮助。谢谢。这真的很接近我想要做的。我真的很想知道你是否能得到一份当前选择中所有命名范围的列表。不知道其他范围。@elb0w-根据您更新的请求更新答案。