Excel VBA-интерпретировать значения" N/A"

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

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

3 ответов


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

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


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

Application.WorksheetFunction.IsNA(rngToCheck.Value)

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

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

вы также можете изучить rngToCheck.Text поскольку это будет содержать строку "#N / A"

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


вы можете подготовить таблицу, которую вы хотите проверить, как описано ниже, и оценить специальные ячейки, содержащие функции, это легко проверить их на 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, некоторые могут использоваться только в качестве макрофункции ячейки.