将带有 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 来简化公式中的双引号。
我正在尝试编写一个 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 来简化公式中的双引号。