Excel VBA – интерпретировать значения «нет данных»
Я просматриваю таблицу, которая содержит столбец цен, в виде double
типов. Я пытаюсь найти недостающее значение, которое отображается в электронной таблице как "n/a"
, но это не позволяет мне интерпретировать это как тип string
.
Ячейка, содержащая "n/a"
представляется integer
типом; как я могу это прочитать?
- Тип Mime для Excel 2007
- Преобразование Excel в xml, не работающее для столбцов с разными значениями типа данных, начинается с номера в строку
- Автоматическое импортирование в тип поля принудительного ввода
- Использование пользовательских типов данных в VBA
- Несоответствие типов данных OleDb в выражении критериев
Ячейка, содержащая # 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, некоторые из них могут использоваться только как функция макроса ячейки.