Excel VBA – интерпретировать значения «нет данных»

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

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

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

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

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

Application.WorksheetFunction.IsNA(rngToCheck.Value)

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

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

Вы также можете изучить rngToCheck.Text как это будет содержать строку «# N / A»,

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

Вы можете подготовить таблицу, которую вы хотите проверить, как описано ниже, и оценить специальные ячейки, содержащие 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() проверяет все ISERR() ошибки, кроме #N/A и полезно для обнаружения ошибок вычисления.

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

Interesting Posts

Чтение данных вместо datestr из файла excel

Excel условные суммы, зависящие от относительной ячейки

Excel VBA: как создать общий объект управления в объект ComboBox?

Не работает ли регулярное выражение в поиске Excel?

Получение этой ошибки при запуске моего макроса VBA

Измените дату изменения стоимости в excel

Формула символов Excel для столбца?

Excel, диапазон критериев SUMIFS также представляет собой диапазон сумм

Невозможно использовать куб OLAP с использованием установленного внешнего подключения к данным в Excel, но я могу создать новое соединение с тем же сервером анализа

Python: Итеративная запись в файлы Excel

как изменить формат и языковой стандарт Excel

Как конвертировать число в будущую дату относительно сегодняшнего дня

Возвращает диапазон от A1 до истинной последней используемой ячейки

Макрос работает на моем компьютере, но получает ошибку «438» во время выполнения на других компьютерах

Заполнение списка for loop для excel с использованием openpyXL

Давайте будем гением компьютера.