Vba excel проверка на ошибку в ячейке

 

N1K0

Пользователь

Сообщений: 70
Регистрация: 01.01.1970

Имеется ячейка с формулой, которая может выдавать значения ошибок (#Н/Д и т.п)  
требуется если Ячейка не содержит ошибку Then выполнить код  

  или if Ячейка является числом Then выполнить код  

  помогите!

 

ytk5kyky

Пользователь

Сообщений: 2410
Регистрация: 01.01.1970

If IsNumeric(ячейка.Value) Then  

  Если известен вид ошибки, то можно проверить значение, например, для #Н/Д:  
If ячейка.Value <> «#N/A»  Then  

  Или так:  
If Not Application.WorksheetFunction.IsError(ячейка.Value) Then  
‘IsError = ЕОШИБКА, IsNA = ЕНД

 

ZVI

Пользователь

Сообщений: 4338
Регистрация: 23.12.2012

Или так: If Not IsError(ActiveCell) Then MsgBox «Нет ошибки»

 

N1K0

Пользователь

Сообщений: 70
Регистрация: 01.01.1970

Перепробовал все способы, работает.  
Спасибо.

 

Здравствуйте. Решил не создавать новую тему а эту освежить, таким вопросом. Как в коде VBA проверить, что в ячейке находится дата ну например 01.01.2011. Знаю что ексель хранит дату и время в числовом формате, но может есть какой то способ? Спасибо!

 

{quote}{login=}{date=06.04.2011 06:40}{thema=Как проверить что в ячейке формат даты}{post}Как в коде VBA проверить, что в ячейке находится дата ну например 01.01.2011. {/post}{/quote}  

  If IsDate(ActiveCell) Then MsgBox «В активной ячейке находится дата!»  

    Вот только IsDate почему-то распознаёт дату даже в ячейке, где содержится текст 1,2,2011  
(Excel не распознаёт этот текст как дату)

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Игорь, я так понял из вопроса, надо на конкретную дату проверить, что-то вроде:  
If ActiveCell = #1/1/2011# Then MsgBox «В активной ячейке находится дата!»  
Но может я и ошибаюсь.

Я сам — дурнее всякого примера! …

 

Guest

Гость

#8

06.04.2011 07:29:07

Да Игорь все правильно вы поняли, надо именно на формат проверить, а не на конкретную дату, я думаю если к вашему методу добавить такую проверку:  

  If (IsDate(ActiveCell) And ActiveCell.Value Like «*.*.*» Then MsgBox «В активной ячейке находится дата!»  
Тогда исключится вариант с запятыми

Q: How do i determine if an error is in any cell in the entire workbook with Excel VBA?

Normally errors will be divide by 0 or #value errors, but this list is not exhaustive (or is it? — i don’t know if more exist)

Is there a way to determine if a cell contains an error then to skip over further processing in my script without spitting out a debug/warning/error message.

something such like

          if value in current.Workbook.cell is error then go to <jump>
           OR
          if value in old.Workbook.cell is error then go to <jump>

where jump is a marker at the end of an if statement but within a loop.

the script compares values between two workbooks and updates the current workbook with colours to show difference.

I have no VBA experience at all. but i get the gist of the script i have been given.

thank you kindly.

asked Nov 22, 2011 at 17:00

Mat's user avatar

MatMat

1,2211 gold badge22 silver badges46 bronze badges

1

You can skip cells with errors by using the VarType function. For example:

If VarType(ActiveCell.Value) <> vbError Then
    ' do something
End If

The VarType function is also very useful to validate the data type. For example if your code expects a date value but sometimes encounters text, you can use this function to vet the data and handle exceptions gracefully.

answered Nov 22, 2011 at 19:18

Rachel Hettinger's user avatar

Rachel HettingerRachel Hettinger

7,8622 gold badges21 silver badges31 bronze badges

1

Here’s an snippet of code that records in the Immediate Window, the worksheet name, cell address and formula, where there is a spreadsheet formula error…

Dim ws As Worksheet, r As Range

For Each ws In Worksheets
    For Each r In ws.UsedRange
        If IsError(r.Value) Then
            Debug.Print r.Parent.Name, r.Address, r.Formula
        End If
    Next
Next

answered Nov 22, 2011 at 21:39

SkipVought's user avatar

1

Given your initial question was how do you detect errors in any cell of the workbook with VBA then you should be looking for a very efficient approach — looking at each cell is very expensive time wise!

Two options for this are:

  1. Use Excel’s SpecialCells to shortcut the process
  2. use my Mappit! addin which is configured to report on spreadsheet errors

For SpecialCells please see the code below. This takes advantage of the ready-made collection of errors that exist as formulas

Please that that constants also have an errors collection, so if you have copied then run a paste special as value on a formula error then you would need to use Set rng1 = ws.Cells.SpecialCells(xlConstants, xlErrors) to detect these

You can use also detect SpecialCells manually by

  • Select all cells in the area of interest
  • Press F5
  • Click Special
  • select ‘Errors’ under ‘Formulas’ (or ‘Constants’)

enter image description here

Please be aware that prior to xl2010 there is a limit of 8192 areas that SpecialCells can handle

Sub ErrorList()
    Dim ws As Worksheet
    Dim rng1 As Range
    Dim strOut As String
    For Each ws In ActiveWorkbook.Sheets
        Set rng1 = Nothing
        On Error Resume Next
        Set rng1 = ws.Cells.SpecialCells(xlFormulas, xlErrors)
        On Error GoTo 0
        If Not rng1 Is Nothing Then strOut = strOut & (ws.Name & " has " & rng1.Cells.Count & " errors" & vbNewLine)
    Next ws
    If Len(strOut) > 0 Then
        MsgBox "Error List:" & vbNewLine & strOut
    Else
        MsgBox "No Errors", vbInformation
    End If
End Sub

answered Nov 23, 2011 at 9:35

brettdj's user avatar

brettdjbrettdj

54.7k16 gold badges113 silver badges176 bronze badges

There’s another way to do handle this: add On Error Resume Next into your code (usually just put it before the loop).

If a cell is an error, it’ll just skip it and move to the next element in the loop :)

answered Nov 23, 2011 at 0:33

Gaijinhunter's user avatar

GaijinhunterGaijinhunter

14.6k4 gold badges51 silver badges57 bronze badges

4

Вопрос:

Q: Как определить, является ли ошибка в любой ячейке во всей книге с помощью Excel VBA?

Обычно ошибки делятся на 0 или # значения ошибок, но этот список не является исчерпывающим (или это? – я не знаю, существует ли больше)

Есть ли способ определить, содержит ли ячейка ошибку, а затем пропустить дальнейшую обработку в моем script, не выплевывая сообщение об отладке/предупреждении/ошибке.

что-то вроде

          if value in current.Workbook.cell is error then go to <jump>
OR
if value in old.Workbook.cell is error then go to <jump>

где jump – маркер в конце stat, но внутри цикла.

script сравнивает значения между двумя книгами и обновляет текущую книгу с цветами, чтобы показать разницу.

У меня нет опыта VBA. но я получаю сущность script i.

Благодарим вас.

Лучший ответ:

Вы можете пропускать ячейки с ошибками с помощью функции VarType. Например:

If VarType(ActiveCell.Value) <> vbError Then
    ' do something
End If

Функция VarType также очень полезна для проверки типа данных. Например, если ваш код ожидает значения даты, но иногда встречает текст, вы можете использовать эту функцию для проверки данных и обработки исключений изящно.

Ответ №1

Здесь приведен фрагмент кода, который записывается в окне “Немедленное”, имя рабочего листа, адрес ячейки и формулу, где есть ошибка формулы электронной таблицы…

Dim ws As Worksheet, r As Range

For Each ws In Worksheets
For Each r In ws.UsedRange
If IsError(r.Value) Then
Debug.Print r.Parent.Name, r.Address, r.Formula
End If
Next
Next

Ответ №2

Учитывая ваш первоначальный вопрос, как вы обнаруживаете ошибки в любой ячейке книги с VBA, вам следует искать очень эффективный подход – глядя на каждую ячейку очень дорогое время!

Два варианта:

  • Используйте Excel SpecialCells для ускорения процесса.
  • используйте мой Mappit! addin, который настроен для отчета о ошибках в электронной таблице.

Для SpecialCells см. код ниже. Это использует готовую коллекцию ошибок, которые существуют в виде формул

Пожалуйста, убедитесь, что эти константы также имеют сбор ошибок, поэтому, если вы скопировали, затем запустите специальную вставку как значение для ошибки формулы, тогда вам нужно будет использовать Set rng1 = ws.Cells.SpecialCells(xlConstants, xlErrors) для обнаружения этих

Вы также можете использовать функцию SpecialCells вручную с помощью

  • Выберите все ячейки в интересующей области.
  • Нажмите F5
  • Нажмите “Специальный”
  • выберите “Ошибки” в разделе “Формулы” (или “Константы” )

enter image description here

Помните, что до xl2010 существует предел 8192 областей, которые могут использовать SpecialCells

Sub ErrorList()
Dim ws As Worksheet
Dim rng1 As Range
Dim strOut As String
For Each ws In ActiveWorkbook.Sheets
Set rng1 = Nothing
On Error Resume Next
Set rng1 = ws.Cells.SpecialCells(xlFormulas, xlErrors)
On Error GoTo 0
If Not rng1 Is Nothing Then strOut = strOut & (ws.Name & " has " & rng1.Cells.Count & " errors" & vbNewLine)
Next ws
If Len(strOut) > 0 Then
MsgBox "Error List:" & vbNewLine & strOut
Else
MsgBox "No Errors", vbInformation
End If
End Sub

Ответ №3

Ответ №4

Есть и другой способ справиться с этим: добавьте On Error Resume Next в свой код (обычно просто ставьте его перед циклом).

Если ячейка является ошибкой, она просто пропустит ее и переместится к следующему элементу цикла:)

Содержание

  • Обзор функции ЕСЛИОШИБКА
  • Что такое функция ЕСЛИОШИБКА?
  • Дополнительные примеры формул ЕСЛИОШИБКА
  • ЕСЛИ ОШИБКА в Google Таблицах
  • ЕСЛИОШИБКА Примеры в VBA

В этом руководстве показано, как использовать функцию Excel ЕСЛИОШИБКА для обнаружения ошибок формулы, заменяя их другой формулой, пустым значением, 0 или настраиваемым сообщением.

Обзор функции ЕСЛИОШИБКА

Функция ЕСЛИОШИБКА Проверяет, приводит ли формула к ошибке. Если ЛОЖЬ, вернуть исходный результат формулы. Если ИСТИНА, вернуть другое указанное значение.

ЕСЛИОШИБКА Синтаксис

Чтобы использовать функцию таблицы Excel ЕСЛИОШИБКА, выберите ячейку и введите:
= ЕСЛИОШИБКА (
Обратите внимание, как появляются входные данные формулы ЕСЛИОШИБКА:

Синтаксис и входные данные функции ЕСЛИОШИБКА:

1 = ЕСЛИОШИБКА (ЗНАЧЕНИЕ; значение_если_ошибка)

ценить — Выражение. Пример: 4 / A1

value_if_error — Значение или расчет для выполнения, если предыдущий ввод привел к ошибке. Пример 0 или «» (пусто)

Что такое функция ЕСЛИОШИБКА?

Функция ЕСЛИОШИБКА относится к категории логических функций в Microsoft Excel, которая включает ISNA, ISERROR и ISERR. Все эти функции помогают обнаруживать и обрабатывать ошибки формул.

ЕСЛИОШИБКА позволяет выполнить расчет. Если расчет не приведет к ошибке, затем отобразится результат расчета. Если расчет делает приводит к ошибке, тогда выполняется другое вычисление (или выводится статическое значение, такое как 0, пробел или какой-то текст).

Когда бы вы использовали функцию ЕСЛИОШИБКА?

  • При делении чисел во избежание ошибок, связанных с делением на 0
  • При выполнении поиска для предотвращения ошибок, если значение не найдено.
  • Если вы хотите выполнить другое вычисление, если первое приводит к ошибке (например, поиск значения в 2nd table, если его нет в первой таблице)

Необработанные ошибки формул могут вызвать ошибки в вашей книге, но видимые ошибки также делают вашу электронную таблицу менее привлекательной.

Если ошибка, то 0

Давайте посмотрим на простой пример. Ниже вы делите два числа. Если вы попытаетесь разделить на ноль, вы получите сообщение об ошибке:

Вместо этого вставьте вычисление в функцию ЕСЛИОШИБКА, и если вы разделите на ноль, вместо ошибки будет выведено 0:

1 = ЕСЛИОШИБКА (A2 / B2; 0)

Если ошибка, то пусто

Вместо того, чтобы устанавливать для ошибок значение 0, вы можете установить их как «пустые» с двойными кавычками («»):

1 = ЕСЛИОШИБКА (A2 / B2; «»)

Мы рассмотрим больше случаев использования ЕСЛИОШИБКИ с функцией ВПР …

ЕСЛИ ОШИБКА с ВПР

Функции поиска, такие как VLOOKUP, будут генерировать ошибки, если значение поиска не будет найдено. Как показано выше, вы можете использовать функцию ЕСЛИОШИБКА для замены ошибок пробелами («») или нулями:

1 = ЕСЛИОШИБКА (ВПР (A2, LookupTable1! $ A $ 2: $ B $ 4,2; FALSE), «не найдено»)

Если ошибка, то сделайте что-нибудь еще

Функцию ЕСЛИОШИБКА также можно использовать для выполнения второго вычисления, если первое вычисление приводит к ошибке:

12 = ЕСЛИОШИБКА (ВПР (A2; LookupTable1! $ A $ 2: $ B $ 4,2; FALSE),ВПР (A2, LookupTable2! $ A $ 2: $ B $ 4,2, FALSE))

Здесь, если данные не найдены в «LookupTable1», вместо этого выполняется ВПР для «LookupTable2».

Дополнительные примеры формул ЕСЛИОШИБКА

Вложенная ЕСЛИОШИБКА — ВПР на нескольких листах

Вы можете вложить ЕСЛИОШИБКУ в другую ЕСЛИОШИБКА, чтобы выполнить 3 отдельных вычисления. Здесь мы будем использовать два IFERROR для выполнения ВПР на 3 отдельных листах:

123 = ЕСЛИОШИБКА (ВПР (A2; LookupTable1! $ A $ 2: $ B $ 4,2; FALSE),ЕСЛИОШИБКА (ВПР (A2; LookupTable2! $ A $ 2: $ B $ 4,2; FALSE),ВПР (A2, LookupTable3! $ A $ 2: $ B $ 4,2, FALSE)))

Индекс / соответствие и XLOOKUP

Конечно, IFERROR также будет работать с формулами Index / Match и XLOOKUP.

ЕСЛИ ОШИБКА XLOOKUP

Функция XLOOKUP — это расширенная версия функции VLOOKUP.

1 = ЕСЛИОШИБКА (XLOOKUP (A2, LookupTable1! $ A $ 2: $ A $ 4, LookupTable1! $ B $ 2: $ B $ 4), «Не найдено»)

ИНДЕКС ЕСЛИ ОШИБКА / СООТВЕТСТВИЕ

ИНДЕКС и ПОИСКПОЗ можно использовать для создания более мощных ВПР (аналогично тому, как работает новая функция XLOOKUP) в Excel.

1 = ЕСЛИОШИБКА (ИНДЕКС (LookupTable1! $ B $ 2: $ B $ 4, MATCH (A3, LookupTable1! $ A $ 2: $ A $ 4,0)), «Не найдено»)

ЕСЛИОШИБКА в массивах

Формулы массива в Excel используются для выполнения нескольких вычислений с помощью одной формулы. Предположим, есть три столбца: Год, Продажи и Средняя цена. Вы можете узнать общее количество по следующей формуле в столбце E.

1 {= СУММ ($ B $ 2: $ B $ 4 / $ C $ 2: $ C $ 4)}

Формула работает хорошо до тех пор, пока она не попытается разделить на ноль, в результате чего получится # DIV / 0! ошибка.

Вы можете использовать функцию ЕСЛИОШИБКА для устранения ошибки следующим образом:

1 {= СУММ (ЕСЛИОШИБКА ($ B $ 2: $ B $ 4 / $ C $ 2: $ C $ 4,0))}

Обратите внимание, что функция ЕСЛИОШИБКА должна быть вложена в функцию СУММ, иначе ЕСЛИОШИБКА будет применяться к общей сумме, а не к каждому отдельному элементу в массиве.

IFNA против ЕСЛИ ОШИБКА

Функция IFNA работает точно так же, как функция ЕСЛИОШИБКА, за исключением того, что функция IFNA выявляет только ошибки # Н / Д. Это чрезвычайно полезно при работе с функциями поиска: обычные ошибки формул по-прежнему будут обнаруживаться, но ошибки не появятся, если значение поиска не найдено.

1 = IFNA (ВПР (A2; LookupTable1! $ A $ 2: $ B $ 4,2; FALSE); «Не найдено»)

Если ISERROR

Если вы все еще используете Microsoft Excel 2003 или более старую версию, вы можете заменить IFERROR комбинацией IF и ISERROR. Вот краткий пример:

1 = ЕСЛИ (ЕСТЬ ОШИБКА (A2 / B2); 0; A2 / B2)

Функция ЕСЛИОШИБКА работает в Google Таблицах точно так же, как и в Excel:

ЕСЛИОШИБКА Примеры в VBA

VBA не имеет встроенной функции ЕСЛИОШИБКА, но вы также можете получить доступ к функции ЕСЛИОШИБКА Excel из VBA:

12 Dim n до тех пор, покаn = Application.WorksheetFunction.IfError (Значение, значение_если_ошибка)

Application.WorksheetFunction дает вам доступ ко многим (не всем) функциям Excel в VBA.

Обычно ЕСЛИОШИБКА используется при чтении значений из ячеек. Если ячейка содержит ошибку, VBA может выдать сообщение об ошибке при попытке обработать значение ячейки. Попробуйте это с помощью приведенного ниже примера кода (где ячейка B2 содержит ошибку):

1234567891011 Sub IFERROR_VBA ()Dim n по длине, м по длинеЕСЛИ ОШИБКАn = Application.WorksheetFunction.IfError (Диапазон («b2»). Значение, 0)«Нет ЕСЛИОШИБКИm = Диапазон («b2»). ЗначениеКонец подписки

Код присваивает ячейку B2 переменной. Второе присвоение переменной вызывает ошибку, потому что значение ячейки # Н / Д, но первое работает нормально из-за функции ЕСЛИОШИБКА.

Вы также можете использовать VBA для создания формулы, содержащей функцию ЕСЛИОШИБКА:

1 Диапазон («C2»). FormulaR1C1 = «= ЕСЛИОШИБКА (RC [-2] / RC [-1], 0)»

Обработка ошибок в VBA сильно отличается от обработки ошибок в Excel. Обычно для обработки ошибок в VBA используется обработка ошибок VBA. Обработка ошибок VBA выглядит так:

12345678910111213141516171819 Sub TestWS ()MsgBox DoesWSExist («тест»)Конец подпискиФункция DoesWSExist (wsName As String) As BooleanDim ws как рабочий листПри ошибке Возобновить ДалееУстановить ws = Sheets (wsName)’Если ошибка WS не существуетЕсли Err.Number 0, тоDoesWSExist = FalseЕщеDoesWSExist = TrueКонец, еслиПри ошибке GoTo -1Конечная функция

Обратите внимание, что мы используем Если Err.Number 0, то чтобы определить, произошла ли ошибка. Это типичный способ отлова ошибок в VBA. Однако функция ЕСЛИОШИБКА имеет некоторые применения при взаимодействии с ячейками Excel.

Возможно, вам также будет интересно:

  • Vba excel ошибка в ячейке
  • Vba проверка ячейки на ошибку
  • Vba ошибка runtime error 6 overflow
  • Vba excel обработка ошибок vba
  • Vba ошибка runtime error 1004

  • Понравилась статья? Поделить с друзьями:
    0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии