Excel VBA - интерпретировать значения «N / A» - PullRequest
10 голосов
/ 07 января 2011

Я перебираю электронную таблицу, которая содержит столбец цен в виде double типов. Я пытаюсь найти отсутствующее значение, которое отображается в электронной таблице как "n/a", но оно не позволяет мне интерпретировать это как string тип.

Ячейка, содержащая "n/a", по-видимому, integer типа; как я могу это прочитать?

Ответы [ 3 ]

10 голосов
/ 11 января 2011

Если все, что вы хотите сделать, это проверить значение ошибки, то:

Application.WorksheetFunction.IsNA(rngToCheck.Value)

где rngToCheck - это ячейка, которую вы хотите проверить на значение ошибки #N/A

(Здесь есть список функций рабочего листа, которые можно вызывать из Excel VBA здесь )

Вы также можете проверить rngToCheck.Text, так как он будет содержать строку "# N / A"

Если вместо этого вы хотите прочитать формулу в ячейке, сгенерировавшей #N/A, тогда rngToCheck.Formula сделает это

6 голосов
/ 07 января 2011

Ячейка, содержащая # N / A, извлекается VBA как вариант, содержащий код ошибки

Как правило, лучше всего присваивать ячейки Excel вариантам, поскольку ячейка может содержать число (двойное), логическое значение, строку или ошибку, и вы не можете заранее сказать, что будет содержать ячейка.

4 голосов
/ 29 января 2013

Вы можете подготовить электронную таблицу, которую вы хотите проверить, как описано ниже, и оценить специальные ячейки, содержащие функции IS , их легко проверить на True или False в VBA. Кроме того, вы можете написать свою собственную функцию VBA, как показано ниже.


Есть Функции Excel , которые проверяют ячейки на наличие специальных значений, например:

=ISNA(C1)

(предполагается, что C1 - это ячейка для проверки). Это вернет True, если ячейка #N/A, в противном случае False.

Если вы хотите показать, имеет ли диапазон ячеек (скажем, "C1:C17") какую-либо ячейку, содержащую #N/A или нет, может показаться целесообразным использовать:

=if(ISNA(C1:C17); "There are #N/A's in one of the cells"; "")

К сожалению, это не так , он не будет работать, как ожидалось. Вы можете оценить только одну ячейку.

Однако вы можете сделать это косвенно , используя:

=if(COUNTIF(E1:E17;TRUE)>0; "There are #N/A's in one of the cells"; "")

при условии, что каждая из ячеек E1 - E17 содержит ISNA формул для каждой ячейки для проверки:

=ISNA(C1)
=ISNA(C2)
...
=ISNA(C17)

Вы можете скрыть столбец E, щелкнув правой кнопкой мыши по столбцу и выбрав Скрыть в контекстном меню Excel, чтобы пользователь вашей электронной таблицы не мог видеть этот столбец. К ним все еще можно получить доступ и оценить, даже если они скрыты.


В VBA вы можете передать объект диапазона в качестве параметра RANGE и оценить значения индивидуально, используя цикл FOR:

Public Function checkCells(Rg As Range) As Boolean
    Dim result As Boolean
    result = False
    For Each r In Rg
        If Application.WorksheetFunction.IsNA(r) Then
            result = True
            Exit For
        End If
    Next
    checkCells = result
End Function

Эта функция использует функцию IsNA () для внутренних целей. Он должен быть размещен внутри модуля, а затем может быть использован внутри электронной таблицы, например:

=checkCells(A1:E5)

Возвращает True, если любая ячейка равна #N/A, в противном случае False. Вы должны сохранить книгу как книгу с поддержкой макросов (расширение XLSM) и убедиться, что макросы не отключены.


Excel предоставляет больше функций, как указано выше:

ISERROR(), ISERR(), ISBLANK(), ISEVEN(), ISODD(), ISLOGICAL(), 
ISNONTEXT(), ISNUMBER(), ISREF(), ISTEXT(), ISPMT()

Например, ISERR() проверяет все ошибки в ячейках, кроме #N/A, и полезно для обнаружения ошибок вычислений.

Все эти функции описаны в встроенной справке Excel (нажмите F1, а затем введите «Функции IS» в качестве текста для поиска объяснения). Некоторые из них могут использоваться внутри VBA, некоторые могут использоваться только как макрофункция ячейки.

...