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

时间:2015-06-03 13:27:14

标签: excel vba vlookup

我正在尝试编写一个VBA代码,它对于一定范围的单元格而言相当于这个excel函数。

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

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

2 个答案:

答案 0 :(得分:0)

不确定为什么要这样做,但您可以使用以下代码轻松地在VBA中创建此功能。上述功能实际上在工作簿中更快更有效,而不是在下面进行,但这是可能的。

使用以下功能现在可以在您的文件中使用单元格B1。然后只需复制并粘贴B2:B15。

= customVLOOKUP(A1,$ķ$ 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

答案 1 :(得分:0)

如果您希望将该公式放入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来处理不匹配项,并更改了#34;&#34;到LEN function以减轻公式中引号的两倍。