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

В Excel VBA получите Путь, который используется при использовании «Сохранить как» (документ, созданный из шаблона!)

Перебирать файлы excel в каталоге и копировать на мастер-лист

Excel удаляется после определенного символа, игнорируя первые 4 экземпляра этого символа

Excel Macro, чтобы скопировать все ячейки, содержащие текущее значение массива, и вставить их в новую книгу

Excel VBA как копировать содержимое ячейки из одной книги в другую

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

EXCEL – Substract две ячейки времени 24hr с секундами и miliseconds

Чтобы получить записи из таблицы в excel, введя уникальные данные

Чтение файлов excel на C # без использования сторонних dlls / oledb / interop / sdk

Сортировка столбцов с пробелами в Excel / Google Таблицах

Синтаксическая ошибка при вставке в Excel

Как решить смешанные форматы даты

C # чтение и запись в файл excel

Макрос для Row killer + Преобразование всех полей как нуля + Сохранить как .xls

Совместимы ли xlrd и xlwt?

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