2015-04-06 48 views
0

我有一个工作表,其中的公式在某些条件下返回=NA()。使用VBA,我想查找#N/A,但我一直无法调整this answerExcel VBA find#N/A

lastrow = .Cells.Find(What:="*", _ 
        After:=.Range("A1"), _ 
        Lookat:=xlPart, _ 
        LookIn:=xlFormulas, _ 
        SearchOrder:=xlByRows, _ 
        SearchDirection:=xlPrevious, _ 
        MatchCase:=False).Row 

我试过What:=CVErr(xlErrNA)What:=xlErrNAWhat:="#N/A"无济于事。

作为一个额外的困难,我不得不考虑荷兰语,所以What:="#N/A"可能甚至不会在荷兰工作。

注意。我好奇地问这个问题,因为我没有找到一种方法在线。 在这一刻,我正在计算哪些单元格包含=NA()

+0

我会认为使用某种'Range.SpecialCells()'调用会为你做诡计,但它不会从我头顶上来。也许看看那条路。 – FreeMan 2015-04-06 14:55:57

回答

3

你正在寻找单元格公式。尝试寻找在细胞,那么我可以得到这个使用字符串“#N/A”为What论证工作:

lastrow = .Cells.Find(What:="#N/A", _ 
      After:=.Range("A1"), _ 
      Lookat:=xlPart, _ 
      LookIn:=xlValues, _ 
      SearchOrder:=xlByRows, _ 
      SearchDirection:=xlPrevious, _ 
      MatchCase:=False).Row 
+0

我以为我已经试过了。我会试一试。 – 2015-04-06 14:11:23

+0

这似乎工作。我可能必须得到正确的荷兰文本。 – 2015-04-06 19:34:14

+0

@GUIJunkie如果你需要它为荷兰语和英语两种语言工作,这也可以通过一些调整。让我知道如果你有任何问题:) – 2015-04-06 20:05:50

0

这里的问题是,您正在寻找“#N/A”作为单元格的值,而不是它是一个错误指示器的值,所以如果你想找到一个单元格,但你必须使用类似这样的东西:

If WorksheetFunction.IfError("Put here a loop to read the cells;"Error")="Error" then 

"Write what you desire for cells with error" 

end if 
+0

循环遍历范围很慢,这就是为什么我想用'find'来代替。 – 2015-04-06 11:29:14

1

请尝试下面的代码, 您应该使用回路阅读错误。

次测试()

If Range("A2").Text = "#N/A" Then 
    MsgBox "hi" 
End If 

末次

+0

非常感谢。我失去了1小时,然后我拿到了。 – 2016-05-02 17:03:55

1

您好我有另一种解决方案, 你有这些公式的值粘贴到另一列文本和

然后用替换代码,

请尝试下面的代码。

Sub Tst() 

    Columns("C:C").Select 
    Selection.Copy 
    Range("D1").Select 
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
     :=False, Transpose:=False 

    Selection.Replace What:="#N/A", Replacement:="", LookAt:=xlPart, _ 
     SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 
     ReplaceFormat:=False 

End Sub 

列C包含公式值(错误)。