2015-04-06 5 views
0

У меня есть рабочий лист с формулой, которая возвращает =NA() при определенных условиях. Используя VBA, я бы хотел найти # N/A, но я не смог настроить this answer.Excel 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:=xlErrNA а также What:="#N/A" безрезультатно.

В качестве дополнительной трудности я должен учитывать голландский, поэтому What:="#N/A", вероятно, даже не работал бы на голландском языке.

Примечание. Я задаю этот вопрос из любопытства, так как не нашел метод в Интернете. В данный момент я вычисляю, какие ячейки содержат =NA()

+0

Я бы подумал, что использование какого-то вызова Range.SpecialCells() вызовет у вас трюк, но это не придет ко мне с головы. Возможно, взгляните вниз по этому пути. – FreeMan

ответ

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

Я думал, что уже пробовал это. Я попробую. –

+0

Это похоже на работу. Я, вероятно, должен получить правильный голландский текст. –

+0

@GUIJunkie, если вам нужно, чтобы он работал на обоих языках голландский и английский, это также было возможно с некоторой настройкой. Дайте мне знать, если у вас есть проблемы с этим :) –

0

Проблема в том, что вы ищете «# N/A» в качестве значения ячейки, и это не значение, это индикатор ошибки, поэтому если вы пытаетесь найти сотовый Wich дает ошибку, вы должны использовать что-то вроде этого:

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' вместо этого. –

1

Пожалуйста, попробуйте следующий код, Вы должны использовать цикл для прочитайте ошибку.

Sub Test()

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

End Sub

+0

Большое спасибо. Я потерял 1 час, потом получил. –

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 Содержит значения формул (ошибка).