繁体   English   中英

在VBA中翻译工作表公式

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM