在VBA中翻译工作表公式

时间:2015-08-26 02:50:19

标签: excel-vba vba excel

有人可以帮我在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

2 个答案:

答案 0 :(得分:1)

.Formula行的第二行有连接问题。

要模仿你问题顶部的公式(这是错误的,因为你应该指向$B$3:$B$595或类似的东西,因为你的查找单元格A3不应该在VLOOKUP范围)。

尝试这条新的.Formula行: -

    .Formula = "=IF(ISERROR(VLOOKUP(A" & top & ",Temp!$B$" & top & ":$B$" & bottom & _
               ",1,FALSE)),A" & top & ", " & "0)"

答案 1 :(得分:1)

您确定要将top用作A列的起始行和列以获取Temp工作表的最后一行吗? Temp工作表上的重要栏目是B栏(即2)而不是C(即3)。

如果您将公式放入垃圾箱!A3:A595引用垃圾箱!A3:A595则这些是循环参考,在正常情况下无法解决。我将公式放入Z列。

如果您使用的是Excel 2007或更新版本,那么我会谦虚地建议使用工作表IFERROR function的替代方案,并且不会尝试使用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

还很奇怪为什么“废纸篓”工作表中的公式行数必须由Temp工作表中的数据行数控制。我原以为“废纸篓”表A列中的值数量应该决定进入“废纸篓”工作表的公式数量。