2015-04-06 103 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包含公式值(錯誤)。