我正在尝试编写一个VBA代码,它将与这个excel函数对一定范围的单元格等效。
=if(A1="", "", vlookup(A1, K1:M2000, 3, false))
我想将此应用于范围(A1:A15),并使用VBA在范围(B1:B15)中插入函数。
发布于 2015-06-03 08:16:47
不知道为什么要这样做,但是可以使用下面的代码在VBA中轻松地实现这个函数。实际上,上面的函数在工作簿中会更快、更有效率,而不是制作下面的功能,但这是可能的。
现在,使用下面的函数应该可以在单元格B1的文件中工作。然后复制并粘贴通过B2:B15。
=定制(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
发布于 2015-06-05 14:14:58
如果您希望将该公式放入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函数来处理非匹配,并将对A1的检查从"“更改为”LEN函数“,以简化公式中的双引号。
https://stackoverflow.com/questions/30621508
复制相似问题