Excel VBA工作表功能VLookup多范围搜索-可能吗?

Excel VBA工作表功能VLookup多范围搜索-可能吗?,excel,vlookup,vba,Excel,Vlookup,Vba,我使用各个工作表上的复选框来设置执行VLookup功能的范围。其中一个复选框需要设置两个不同的搜索范围。我不知道该怎么做。所有其他可能的变体都在搜索一个连续的单元格字符串(即[S9:T20]或[S55:T66]),但不是两者都在搜索。如果我最终不得不使用u多个变量并执行两次该函数,我的其余代码可能无法工作。如果有任何想法,包括某种Find函数是否可以执行类似的工作,都将不胜感激。 下面是我使用的代码片段: Dim rngO As Variant ElseIf ActiveSheet.S

我使用各个工作表上的复选框来设置执行VLookup功能的范围。其中一个复选框需要设置两个不同的搜索范围。我不知道该怎么做。所有其他可能的变体都在搜索一个连续的单元格字符串(即[S9:T20]或[S55:T66]),但不是两者都在搜索。如果我最终不得不使用u多个变量并执行两次该函数,我的其余代码可能无法工作。如果有任何想法,包括某种Find函数是否可以执行类似的工作,都将不胜感激。 下面是我使用的代码片段:

  Dim rngO As Variant

  ElseIf ActiveSheet.Shapes("Check Box 43").ControlFormat.Value = 1 Then
   rngO = [S9:T20;S55:T66]
rngO变体的使用如下所示(一个示例):


简短回答:是-是的!

详细回答:

您可以通过一些代码分别查看源代码范围的每个区域来包装
工作表function.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
在原始代码中,用相同的参数调用
MyVLookup()
替换对
WorksheetFunction.VLookup()的所有调用


或者,您可以在单元格公式中直接使用此函数(这是我通常使用它的方式…)

这在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