0

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

1 回答 1

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()

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

于 2013-10-03T07:53:51.773 回答