[英]Translate a worksheet formula in VBA
有人可以帮我用excel VBA编写此公式吗?
=IF(ISERROR(VLOOKUP(A3,Temp!$A$3:$A$595,1,FALSE)),A3,"0")
我的代码陷入了:“语法错误”
Sub checkDuplitems()
Application.ScreenUpdating = False
Const top As Integer = 3
Dim bottom As Long
bottom = Sheets("Temp").Cells(Rows.Count, top).End(xlUp).row
With ThisWorkbook.Sheets("trash").Range("A" & top & ":A" & bottom)
.Formula = "=IF(ISERROR(VLOOKUP(A" & top & ",Temp!$B$" & top & ":$B$" & bottom & _
",1,FALSE)),A" & top & ", & '" 0" & ," '")"
.Value = .Value
.SortSpecial
End With
'Call something...
End Sub
.Formula
行的第二行中有串联问题。
要模拟公式,您首先要问的是问题(这是错误的,因为您应该指向$B$3:$B$595
或类似的东西,因为您的查找单元格A3
不应在VLOOKUP
范围内)。
试试这个新的.Formula
行:-
.Formula = "=IF(ISERROR(VLOOKUP(A" & top & ",Temp!$B$" & top & ":$B$" & bottom & _
",1,FALSE)),A" & top & ", " & "0)"
您确定要同时使用top
作为A列中的起始行以及将该列从Temp工作表中获取为底行吗? Temp工作表上的重要列是B列(即2)而不是C列(即3)。
如果要将引用Trash!A3:A595的公式放入Trash!A3:A595,则这些是循环引用,在正常情况下无法解析。 我将公式放入Z列。
如果您使用的是Excel 2007或更高版本,那么我会谦虚地建议使用此替代方法,该替代方法使用工作表的IFERROR函数 ,并且不尝试使返回的值不为0。
Const top As Integer = 3
Dim bottom As Long
bottom = Sheets("Temp").Cells(Rows.Count, "B").End(xlUp).Row '<~~change here
With ThisWorkbook.Sheets("trash")
With .Range("Z" & top, .Cells(Rows.Count, "A").End(xlUp).Offset(0, 25))
.Formula = "=IFERROR(VLOOKUP(A" & top & ", Temp!$B$" & top & ":$B$" & bottom & _
", 1, FALSE), 0)" '<~~ big change here
.Value = .Value
End With
End With
奇怪的是,为什么“废纸work”工作表中的公式行数必须由“临时”工作表中的数据行数来控制。 我本来以为垃圾箱工作表A列中的值数量应该控制垃圾箱工作表中有多少个公式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.