Excel VBA WorksheetFunction VLookup多范围搜索 - 可能吗?

时间:2013-10-03 02:38:34

标签: excel-vba vlookup vba excel

我在各个工作表上使用复选框来设置执行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 = "."

1 个答案:

答案 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()的所有来电。

或者你可以直接在单元格公式中使用这个函数(这就是我通常用它做的...)