我在各个工作表上使用复选框来设置执行VLookup功能的范围。其中一个复选框需要设置两个不同的搜索范围。我没有关于如何使这项工作的想法。所有其他可能的变体都是搜索连续的单元格串(即[S9:T20]或[S55:T66],但不是两者。如果我最终不得不使用多个变量并执行两次函数,那么我的其余代码可能会不工作。任何想法都会受到赞赏,包括某种Find功能可能会做类似的工作。 以下是我使用的代码片段:
Dim rngO As Variant
ElseIf ActiveSheet.Shapes("Check Box 43").ControlFormat.Value = 1 Then
rngO = [S9:T20;S55:T66]
使用rngO变体如下所示(一个例子):
Case 2
With ActiveSheet
.Range("U2").Value = "1Y"
.Range("V2").Value = WorksheetFunction.VLookup("1Y", rngO, 2, False)
.Range("U3").Value = "1P"
.Range("V3").Value = WorksheetFunction.VLookup("1P", rngO, 2, False)
.Range("U4").Value = "."
.Range("V4").Value = "."
答案 0 :(得分:0)
简短回答:是 - 是的!
更长的回答:
您可以通过一些代码来封装WorksheetFunction.VLookup()
,分别查看源范围的每个区域。
Function MyVLookup(Arg As Variant, Source As Range, ColNum As Integer, Optional CmpSwitch As Boolean = True) As Variant
Dim Idx As Integer
MyVLookup = CVErr(xlErrNA) ' default return value if nothing found
On Error Resume Next ' trap 1004 error if Arg is not found
For Idx = 1 To Source.Areas.Count
MyVLookup = WorksheetFunction.VLookup(Arg, Source.Areas(Idx), ColNum, CmpSwitch)
If Not IsError(MyVLookup) Then Exit For ' stop after 1st match
Next Idx
End Function
并在您的原始代码中,通过使用相同参数调用WorksheetFunction.VLookup()
来替换对MyVLookup()
的所有来电。
或者你可以直接在单元格公式中使用这个函数(这就是我通常用它做的...)