将带有 IF 语句的 VLOOKUP 函数应用于范围

Applying VLOOKUP function with IF statement to a range

我正在尝试编写一个 VBA 代码,该代码等效于此 excel 函数,适用于一定范围的单元格。

=if(A1="", "", vlookup(A1, K1:M2000, 3, false))

我想将此应用于范围 (A1:A15) 并使用 VBA 在范围 (B1:B15) 中插入函数。

不确定您为什么要这样做,但是您可以使用以下代码在 VBA 中轻松实现此功能。上面的函数在工作簿中实际上会比下面的函数更快更有效,但这是可能的。

现在应该可以在单元格 B1 的文件中使用以下函数。然后只需复制并粘贴 B2:B15.

=customVLOOKUP(A1,$K$1:$M$2000,3,FALSE)

请注意,最后两个参数默认设置为 3 和 false,因此 =customVLOOKUP(A1,$K$1:$M$2000) 将给出与上述相同的结果

Function customVLOOKUP(lookup As Range, lookupRng As Range, Optional lookupCol As Integer = 3, Optional lookupType As Boolean = False) As Variant

' check to see if lookup value is empty string
' if so return empty string to function and exit
' otherwise, evaluate normal vlookup function
If lookup.Value = "" Then

    customVLOOKUP = ""
    Exit Function

Else

    customVLOOKUP = Application.WorksheetFunction.VLookup(lookup.Value2, lookupRng, lookupCol, lookupType)

End If

End Function

如果您希望将该公式放入 B1:B15 并在公式填写时调整所有 A 列引用,则无需遍历单元格。将公式放入 B1:B15 单元格块,A 列的引用将自动调整。

with activesheet   '<-reference this worksheet properly!
    with .range("B1:B15")
        ' use this one
        .formula = "=if(len(A1), iferror(vlookup(A1, K:M, 3, false), """"), """")"
        ' or this one
        .formulaR1C1 = "=if(len(RC[-1]), iferror(vlookup(A1, C11:C13, 3, false), """"), """")"
    end with
end with

请注意,原始公式中的每对双引号都需要加倍,因为它们是带引号的字符串中的引号。我添加了一个 IFERROR function to handle non-matches and changes the check on A1 from "" to the LEN function 来简化公式中的双引号。