Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2019 для Mac Excel 2016 Excel 2016 для Mac Excel 2013 Excel Web App Excel 2010 Excel 2007 Excel для Mac 2011 Excel Starter 2010 Еще…Меньше
Функцию ЕСЛИERROR можно использовать для перебора и обработки ошибок в формуле. Если же формула возвращает значение, определяемую формулой, возвращается ошибка; в противном случае возвращается результат формулы.
Синтаксис
ЕСЛИОШИБКА(значение;значение_если_ошибка)
Аргументы функции ЕСЛИОШИБКА описаны ниже.
-
значение Обязательный аргумент. Проверяемая на ошибку аргумент.
-
value_if_error — обязательный аргумент. Значение, возвращаемая, если формула возвращает ошибку. Вычисляются следующие типы ошибок: #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?или #NULL!.
Замечания
-
Если значение или value_if_error пустая ячейка, то если ЕСЛИЕROR рассматривает его как пустую строковую строку («»).
-
Если значение является формулой массива, то функции ЕСЛИERROR возвращают массив результатов для каждой ячейки в диапазоне, указанном в значении. См. второй пример ниже.
Примеры
Скопируйте данные из таблицы ниже и вставьте их в ячейку A1 нового листа Excel. Чтобы отобразить результаты формул, выделите их и нажмите клавишу F2, а затем — ВВОД.
Котировка |
Единиц продано |
|
---|---|---|
210 |
35 |
|
55 |
0 |
|
23 |
||
Формула |
Описание |
Результат |
=ЕСЛИОШИБКА(A2/B2;»Ошибка при вычислении») |
Выполняет проверку на предмет ошибки в формуле в первом аргументе (деление 210 на 35), не обнаруживает ошибок и возвращает результат вычисления по формуле |
6 |
=ЕСЛИОШИБКА(A3/B3;»Ошибка при вычислении») |
Выполняет проверку на предмет ошибки в формуле в первом аргументе (деление 55 на 0), обнаруживает ошибку «деление на 0» и возвращает «значение_при_ошибке» |
Ошибка при вычислении |
=ЕСЛИОШИБКА(A4/B4;»Ошибка при вычислении») |
Выполняет проверку на предмет ошибки в формуле в первом аргументе (деление «» на 23), не обнаруживает ошибок и возвращает результат вычисления по формуле. |
0 |
Пример 2
Котировка |
Единиц продано |
Отношение |
---|---|---|
210 |
35 |
6 |
55 |
0 |
Ошибка при вычислении |
23 |
0 |
|
Формула |
Описание |
Результат |
=C2 |
Выполняет проверку на предмет ошибки в формуле в первом аргументе в первом элементе массива (A2/B2 или деление 210 на 35), не обнаруживает ошибок и возвращает результат вычисления по формуле |
6 |
=C3 |
Выполняет проверку на предмет ошибки в формуле в первом аргументе во втором элементе массива (A3/B3 или деление 55 на 0), обнаруживает ошибку «деление на 0» и возвращает «значение_при_ошибке» |
Ошибка при вычислении |
=C4 |
Выполняет проверку на предмет ошибки в формуле в первом аргументе в третьем элементе массива (A4/B4 или деление «» на 23), не обнаруживает ошибок и возвращает результат вычисления по формуле |
0 |
Примечание. Если у вас есть текущая версия Microsoft 365 ,вы можете ввести формулу в левую верхнюю ячейку диапазона выходных данных, а затем нажать ввод, чтобы подтвердить формулу как формулу динамического массива. В противном случае формула должна быть введена как формула массива устаревшей. Для этого сначала выберем диапазон вывода, введите формулу в левую верхнюю ячейку диапазона, а затем нажмите CTRL+SHIFT+ВВОД, чтобы подтвердить ее. Excel автоматически вставляет фигурные скобки в начале и конце формулы. Дополнительные сведения о формулах массива см. в статье Использование формул массива: рекомендации и примеры. |
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
Нужна дополнительная помощь?
Skip to content
В статье описано, как использовать функцию ЕСЛИОШИБКА в Excel для обнаружения ошибок и замены их пустой ячейкой, другим значением или определённым сообщением. Покажем примеры, как использовать функцию ЕСЛИОШИБКА с функциями визуального просмотра и сопоставления индексов, а также как она сравнивается с ЕСЛИ ОШИБКА и ЕСНД.
«Дайте мне точку опоры, и я переверну землю», — сказал однажды Архимед. «Дайте мне формулу, и я заставлю ее вернуть ошибку», — сказал бы пользователь Excel. Здесь мы не будем рассматривать, как получить ошибки в Excel. Мы узнаем, как предотвратить их, чтобы ваши таблицы были чистыми, а формулы — понятными и точными.
Итак, вот о чем мы поговорим:
Что означает функция Excel ЕСЛИОШИБКА
Функция ЕСЛИОШИБКА (IFERROR по-английски) предназначена для обнаружения и устранения ошибок в формулах и вычислениях. Это значит, что функция ЕСЛИОШИБКА должна выполнить определенные действия, если видит какую-либо ошибку. Более конкретно, она проверяет формулу и, если вычисление дает ошибку, то она возвращает какое-то другое значение, которое вы ей укажете. Если же всё хорошо, то просто возвращает результат формулы.
Синтаксис функции Excel ЕСЛИОШИБКА следующий:
ЕСЛИОШИБКА(значение; значение_если_ошибка)
Где:
- Значение (обязательно) — что проверять на наличие ошибок. Это может быть формула, выражение или ссылка на ячейку.
- Значение_если_ошибка (обязательно) — что возвращать при обнаружении ошибки. Это может быть пустая строка (получится пустая ячейка), текстовое сообщение, числовое значение, другая формула или вычисление.
Например, при делении двух столбцов чисел можно получить кучу разных ошибок, если в одном из столбцов есть пустые ячейки, нули или текст.
Рассмотрим простой пример:
Чтобы этого не произошло, используйте формулу ЕСЛИОШИБКА, чтобы перехватывать и обрабатывать их нужным вам образом.
Если ошибка, то пусто
Укажите пустую строку (“”) в аргументе значение_если_ошибка, чтобы вернуть пустую ячейку, если обнаружена ошибка:
=ЕСЛИОШИБКА(A4/B4; «»)
Вернемся к нашему примеру и используем ЕСЛИОШИБКА:
Как видите по сравнению с первым скриншотом, вместо стандартных сообщений мы видим просто пустые ячейки.
Если ошибка, то показать сообщение
Вы также можете отобразить собственное сообщение вместо стандартного обозначения ошибок Excel:
=ЕСЛИОШИБКА(A4/B4; «Ошибка в вычислениях»)
Перед вами – третий вариант нашей небольшой таблицы.
5 фактов, которые нужно знать о функции ЕСЛИОШИБКА в Excel
- ЕСЛИОШИБКА в Excel обрабатывает все типы ошибок, включая #ДЕЛ/0!, #Н/Д, #ИМЯ?, #NULL!, #ЧИСЛО!, #ССЫЛКА! и #ЗНАЧ!.
- В зависимости от содержимого аргумента значение_если_ошибка функция может заменить ошибки вашим текстовым сообщением, числом, датой или логическим значением, результатом другой формулы или пустой строкой (пустой ячейкой).
- Если аргумент значение является пустой ячейкой, он обрабатывается как пустая строка (»’), но не как ошибка.
- ЕСЛИОШИБКА появилась в Excel 2007 и доступна во всех последующих версиях Excel 2010, Excel 2013, Excel 2016, Excel 2019, Excel 2021 и Excel 365.
- Чтобы перехватывать ошибки в Excel 2003 и более ранних версиях, используйте функцию ЕОШИБКА в сочетании с функцией ЕСЛИ, например как показано ниже:
=ЕСЛИ(ЕОШИБКА(A4/B4);»Ошибка в вычислениях»;A4/B4)
Далее вы увидите, как можно использовать ЕСЛИОШИБКА в Excel в сочетании с другими функциями для выполнения более сложных задач.
ЕСЛИОШИБКА с функцией ВПР
Часто встречающаяся задача в Excel – поиск нужного значения в таблице в соответствии с определёнными критериями. И не всегда этот поиск бывает успешным. Одним из наиболее распространенных применений функции ЕСЛИОШИБКА является сообщение пользователям, что искомое значение не найдено в базе данных. Для этого вы заключаете формулу ВПР в функцию ЕСЛИОШИБКА примерно следующим образом:
ЕСЛИОШИБКА(ВПР( … );»Не найдено»)
Если искомое значение отсутствует в таблице, которую вы просматриваете, обычная формула ВПР вернет ошибку #Н/Д:
Для лучшего понимания таблицы и улучшения ее внешнего вида, заключите функцию ВПР в ЕСЛИОШИБКА и покажите более понятное для пользователя сообщение:
=ЕСЛИОШИБКА(ВПР(D3; $A$3:$B$5; 2;ЛОЖЬ); «Не найдено»)
На скриншоте ниже показан пример ЕСЛИОШИБКА вместе с ВПР в Excel:
Если вы хотите перехватывать только #Н/Д, но не все подряд ошибки, используйте функцию ЕНД вместо ЕСЛИОШИБКА. Она просто возвращает ИСТИНА или ЛОЖЬ в зависимости от появления ошибки #Н/Д. Поэтому нам здесь еще понадобится функция ЕСЛИ, чтобы обработать эти логические значения:
=ЕСЛИ(ЕНД(ВПР(D3; $A$3:$B$5; 2;ЛОЖЬ)); «Не найдено»;ВПР(D3; $A$3:$B$5; 2;ЛОЖЬ))
Дополнительные примеры формул Excel ЕСЛИОШИБКА ВПР можно также найти в нашей статье Как убрать сообщение #Н/Д в ВПР?
Вложенные функции ЕСЛИОШИБКА для выполнения последовательных ВПР
В ситуациях, когда вам нужно выполнить несколько операций ВПР в зависимости от того, была ли предыдущая ВПР успешной или неудачной, вы можете вложить две или более функции ЕСЛИОШИБКА одну в другую.
Предположим, у вас есть несколько отчетов о продажах из региональных отделений вашей компании, и вы хотите получить сумму по определенному идентификатору заказа. С ячейкой В9 в качестве критерия поиска (номер заказа) и тремя небольшими таблицами поиска (таблица 1, 2 и 3), формула выглядит следующим образом:
=ЕСЛИОШИБКА(ВПР(B9;A3:B6;2;0);ЕСЛИОШИБКА(ВПР(B9;D3:E6;2;0);ЕСЛИОШИБКА(ВПР(B9;G3:H6;2;0);»Не найден»)))
Результат будет выглядеть примерно так, как на рисунке ниже:
То есть, если поиск завершился неудачей (то есть, ошибкой) первой таблице, начинаем искать во второй, и так далее. Если нигде ничего не нашли, получим сообщение «Не найден».
ЕСЛИОШИБКА в формулах массива
Как вы, наверное, знаете, формулы массива в Excel предназначены для выполнения нескольких вычислений внутри одной формулы. Если вы в аргументе значение функции ЕСЛИОШИБКА укажете формулу или выражение, которое возвращает массив, она также обработает и вернет массив значений для каждой ячейки в указанном диапазоне. Пример ниже поможет пояснить это.
Допустим, у вас есть Сумма в столбце B и Цена в столбце C, и вы хотите вычислить Количество. Это можно сделать с помощью следующей формулы массива, которая делит каждую ячейку в диапазоне B2:B4 на соответствующую ячейку в диапазоне C2:C4, а затем суммирует результаты:
=СУММ(($B$2:$B$4/$C$2:$C$4))
Формула работает нормально, пока в диапазоне делителей нет нулей или пустых ячеек. Если есть хотя бы одно значение 0 или пустая строка, то возвращается ошибка: #ДЕЛ/0! Из-за одной некорректной позиции мы не можем получить итоговый результат.
Чтобы исправить эту ситуацию, просто вложите деление внутрь формулы ЕСЛИОШИБКА:
=СУММ(ЕСЛИОШИБКА($B$2:$B$4/$C$2:$C$4;0))
Что делает эта формула? Делит значение в столбце B на значение в столбце C в каждой строке (3500/100, 2000/50 и 0/0) и возвращает массив результатов {35; 40; #ДЕЛ/0!}. Функция ЕСЛИОШИБКА перехватывает все ошибки #ДЕЛ/0! и заменяет их нулями. Затем функция СУММ суммирует значения в итоговом массиве {35; 40; 0} и выводит окончательный результат (35+40=75).
Примечание. Помните, что ввод формулы массива должен быть завершен нажатием комбинации Ctrl + Shift + Enter (если у вас не Office365 или Excel2021 – они понимают формулы массива без дополнительных телодвижений).
ЕСЛИОШИБКА или ЕСЛИ + ЕОШИБКА?
Теперь, когда вы знаете, как использовать функцию ЕСЛИОШИБКА в Excel, вы можете удивиться, почему некоторые люди все еще склоняются к использованию комбинации ЕСЛИ + ЕОШИБКА. Есть ли у этого старого метода преимущества по сравнению с ЕСЛИОШИБКА?
В старые недобрые времена Excel 2003 и более ранних версий, когда ЕСЛИОШИБКА не существовало, совместное использование ЕСЛИ и ЕОШИБКА было единственным возможным способом перехвата ошибок. Это просто немного более сложный способ достижения того же результата.
Например, чтобы отловить ошибки ВПР, вы можете использовать любую из приведенных ниже формул.
В Excel 2007 — Excel 2016:
ЕСЛИОШИБКА(ВПР( … ); «Не найдено»)
Во всех версиях Excel:
ЕСЛИ(ЕОШИБКА(ВПР(…)); «Не найдено»; ВПР(…))
Обратите внимание, что в формуле ЕСЛИ ЕОШИБКА ВПР вам нужно дважды выполнить ВПР. Чтобы лучше понять, расшифруем: если ВПР приводит к ошибке, вернуть «Не найдено», в противном случае вывести результат ВПР.
А вот простой пример формулы Excel ЕСЛИ ЕОШИБКА ВПР:
=ЕСЛИ(ЕОШИБКА(ВПР(D2; A2:B5;2;ЛОЖЬ)); «Не найдено»; ВПР(D2; A2:B5;2;ЛОЖЬ ))
ЕСЛИОШИБКА против ЕСНД
Представленная в Excel 2013, ЕСНД (IFNA в английской версии) — это еще одна функция для проверки формулы на наличие ошибок. Его синтаксис похож на синтаксис ЕСЛИОШИБКА:
ЕСНД(значение; значение_если_НД)
Чем ЕСНД отличается от ЕСЛИОШИБКА? Функция ЕСНД перехватывает только ошибки #Н/Д, тогда как ЕСЛИОШИБКА обрабатывает все типы ошибок.
В каких ситуациях вы можете использовать ЕСНД? Когда нецелесообразно скрывать все ошибки. Например, при работе с важными данными вы можете захотеть получать предупреждения о возможных ошибках в вашем наборе данных (случайном делении на ноль и т.п.), а стандартные сообщения об ошибках Excel с символом «#» могут быть яркими визуальными индикаторами проблем.
Давайте посмотрим, как можно создать формулу, отображающую сообщение «Не найдено» вместо ошибки «Н/Д», которая появляется, когда искомое значение отсутствует в наборе данных, но при этом вы будете видеть все другие ошибки Excel.
Предположим, вы хотите получить Количество из таблицы поиска в таблицу с результатами, как показано на рисунке ниже. Проще всего было бы использовать ЕСЛИОШИБКА с ВПР. Таблица приобрела бы красивый вид, но при этом за надписью «Не найдено» были бы скрыты не только ошибки поиска, но и все другие ошибки. И мы не заметили бы, что в исходной таблице поиска у нас есть ошибка деления на ноль, так как не заполнена цена персиков. Поэтому более разумно использовать ЕСНД, чтобы с ее помощью обработать только ошибки поиска:
=ЕСНД(ВПР(F3; $A$3:$D$6; 4;ЛОЖЬ); «Не найдено»)
Или подойдет комбинация ЕСЛИ ЕНД для старых версий Excel:
=ЕСЛИ(ЕНД(ВПР(F3; $A$3:$D$6; 4;ЛОЖЬ));»Не найдено»; ВПР(F3; $A$3:$D$6; 4;ЛОЖЬ))
Как видите, формула ЕСНД с ВПР возвращает «Не найдено» только для товара, которого нет в таблице поиска (Сливы). Для персиков она показывает #ДЕЛ/0! что указывает на то, что наша таблица поиска содержит ошибку деления на ноль.
Рекомендации по использованию ЕСЛИОШИБКА в Excel
Итак, вы уже знаете, что функция ЕСЛИОШИБКА — это самый простой способ отлавливать ошибки в Excel и маскировать их пустыми ячейками, нулевыми значениями или собственными сообщениями. Однако это не означает, что вы должны обернуть каждую формулу в функцию обработки ошибок.
Эти простые рекомендации могут помочь вам сохранить баланс.
- Не ловите ошибки без весомой на то причины.
- Оберните в ЕСЛИОШИБКА только ту часть формулы, где по вашему мнению могут возникнуть проблемы.
- Чтобы обрабатывать только определенные ошибки, используйте другую функцию обработки ошибок с меньшей областью действия:
- ЕСНД или ЕСЛИ ЕНД для обнаружения только ошибок #H/Д.
- ЕОШ для обнаружения всех ошибок, кроме #Н/Д.
Мы постарались рассказать, как можно использовать функцию ЕСЛИОШИБКА в Excel. Примеры перехвата и обработки ошибок могут быть полезны и для «чайников», и для более опытных пользователей.
Также рекомендуем:
When you work with data and formulas in Excel, you’re bound to encounter errors.
To handle errors, Excel has provided a useful function – the IFERROR function.
Before we get into the mechanics of using the IFERROR function in Excel, let’s first go through the different kinds of errors you can encounter when working with formulas.
Types of Errors in Excel
Knowing the errors in Excel will better equip you to identify the possible reason and the best way to handle these.
Below are the types of errors you might find in Excel.
#N/A Error
This is called the ‘Value Not Available’ error.
You will see this when you use a lookup formula and it can’t find the value (hence Not Available).
Below is an example where I use the VLOOKUP formula to find the price of an item, but it returns an error when it can’t find that item in the table array.
#DIV/0! Error
You’re likely to see this error when a number is divided by 0.
This is called the division error. In the below example, it gives a #DIV/0! error as the quantity value (the divisor in the formula) is 0.
#VALUE! Error
The value error occurs when you use an incorrect data type in a formula.
For example, in the below example, when I try to add cells that have numbers and character A, it gives the value error.
This happens as you can only add numeric values, but instead, I tried adding a number with a text character.
#REF! Error
This is called the reference error and you will see this when the reference in the formula is no longer valid. This could be the case when the formula refers to a cell reference and that cell reference does not exist (happens when you delete a row/column or worksheet that was referred to in the formula).
In the below example, while the original formula was =A2/B2, when I deleted Column B, all the references to it became #REF! and it also gave the #REF! error as the result of the formula.
#NAME ERROR
This error is likely to a result of a misspelled function.
For example, if instead of VLOOKUP, you by mistake use VLOKUP, it will give a name error.
#NUM ERROR
Num error can occur if you try and calculate a very large value in Excel. For example, =187^549 will return a number error.
Another situation where you can get the NUM error is when you give a non-valid number argument to a formula. For example, if you’re calculating the Square Root if a number and you give a negative number as the argument, it will return a number error.
For example, in the case of Square Root function, if you give a negative number as the argument, it will return a number error (as shown below).
While I have shown only a couple of examples here, there can be many other reasons that can lead to errors in Excel. When you get errors in Excel, you can’t just leave it there. If the data is further used in calculations, you need to make sure the errors are handled the right way.
Excel IFERROR function is a great way to handle all types of errors in Excel.
Excel IFERROR Function – An Overview
Using the IFERROR function, you can specify what you want the formula to return instead of the error. If the formula does not return an error, then its own result is returned.
IFERROR Function Syntax
=IFERROR(value, value_if_error)
Input Arguments
- value – this is the argument that is checked for the error. In most cases, it is either a formula or a cell reference.
- value_if_error – this is the value that is returned if there is an error. The following error types evaluated: #N/A, #REF!, #DIV/0!, #VALUE!, #NUM!, #NAME?, and #NULL!.
Additional Notes:
- If you use “” as the value_if_error argument, the cell displays nothing in case of an error.
- If the value or value_if_error argument refers to an empty cell, it is treated as an empty string value by the Excel IFERROR function.
- If the value argument is an array formula, IFERROR will return an array of results for each item in the range specified in value.
Excel IFERROR Function – Examples
Here are three examples of using IFERROR function in Excel.
Example 1 – Return Blank Cell Instead of Error
If you have functions that may return an error, you can wrap it within the IFERROR function and specify blank as the value to return in case of an error.
In the example shown below, the result in D4 is the #DIV/0! error as the divisor is 0.
In this case, you can use the following formula to return blank instead of the ugly DIV error.
=IFERROR(A1/A2,””)
This IFERROR function would check whether the calculation leads to an error. If it does, it simply returns a blank as specified in the formula.
Here, you can also specify any other string or formula to display instead of the blank.
For example, the below formula would return the text “Error”, instead of the blank cell.
=IFERROR(A1/A2,”Error”)
Note: If you are using Excel 2003 or a prior version, you will not find the IFERROR function in it. In such cases, you need to use the combination of IF function and ISERROR function.
Example 2 – Return ‘Not Found’ when VLOOKUP Can’t Find a Value
When you use the Excel VLOOKUP Function, and it can’t find the lookup value in the specified range, it would return the #N/A error.
For example, below is a data set of student names and their marks. I have used the VLOOKUP function to fetch the marks of three students (in D2, D3, and D4).
While the VLOOKUP formula in the above example finds the names of first two students, it can’t find Josh’s name on the list and hence it returns the #N/A error.
Here, we can use the IFERROR function to return a blank or some meaningful text instead of the error.
Below is the formula that will return ‘Not Found’ instead of the error.
=IFERROR(VLOOKUP(D2,$A$2:$B$12,2,0),”Not Found”)
Note that you can also use IFNA instead of IFERROR with VLOOKUP. While IFERROR would treat all kinds of error values, IFNA would only work on the #N/A errors and wouldn’t work with other errors.
Example 3 – Return 0 in case of an Error
If you don’t specify the value to return by IFERROR in the case of an error, it would automatically return 0.
For example, if I divide 100 with 0 as shown below, it would return an error.
However, if I use the below IFERROR function, it would return a 0 instead. Note that you still need to use a comma after the first argument.
Example 4 – Using Nested IFERROR with VLOOKUP
Sometimes when using VLOOKUP, you may have to look through the fragmented table of arrays. For example, suppose you have the sales transaction records in 2 separate worksheets and you want to look-up an item number and see it’s value.
Doing this requires using nested IFERROR with VLOOKUP.
Suppose you have a dataset as shown below:
In this case, to find the score for Grace, you need to use the below nested IFERROR formula:
=IFERROR(VLOOKUP(G3,$A$2:$B$5,2,0),IFERROR(VLOOKUP(G3,$D$2:$E$5,2,0),"Not Found"))
This kind of formula nesting ensure that you get the value from either of the table and any error returned is handled.
Note that in case the tables are on the same worksheet, however, in a real-life example, it likely to be on different worksheets.
Excel IFERROR Function – VIDEO
Related Excel Functions:
- Excel AND Function.
- Excel OR Function.
- Excel NOT Function.
- Excel IF Function.
- Excel IFS Function.
- Excel FALSE Function.
- Excel TRUE Function.
You May Also Like the Following Excel Tutorials:
- Use IFERROR with VLOOKUP to Get Rid of #N/A Errors.
- Identify Errors Using Excel Formula Debugging.
Функция IFERROR (ЕСЛИОШИБКА) в Excel лучше всего подходит для обработки случаев, когда формулы возвращают ошибку. Используя эту функцию, вы можете указать, какое значение функция должна возвращать вместо ошибки. Если функция в ячейке не возвращает ошибку, то возвращается её собственный результат.
Содержание
- Видеоурок
- Что возвращает функция
- Синтаксис
- Аргументы функции
- Дополнительная информация
- Примеры использования функции IFERROR (ЕСЛИОШИБКА) в Excel
- Пример 1. Заменяем ошибки в ячейке на пустые значения
- Пример 2. Заменяем значения без данных при использовании функции VLOOKUP (ВПР) на “Не найдено”
- Пример 3. Возвращаем значение “0” вместо ошибок формулы
Видеоурок
Что возвращает функция
Указанное вами значение, в случае если в ячейке есть ошибка.
Синтаксис
=IFERROR(value, value_if_error) — английская версия
=ЕСЛИОШИБКА(значение;значение_если_ошибка) — русская версия
Аргументы функции
- value (значение) — это аргумент, который проверяет, есть ли в ячейке ошибка. Обычно, ошибкой может быть результат какого либо вычисления;
- value_if_error (значение_если_ошибка) — это аргумент, который заменяет ошибку в ячейке (в случае её наличия) на указанное вами значение. Ошибки могут выглядеть так: #N/A, #REF!, #DIV/0!, #VALUE!, #NUM!, #NAME?, #NULL! (английская версия Excel) или #ЗНАЧ!, #ДЕЛ/0, #ИМЯ?, #Н/Д, #ССЫЛКА!, #ЧИСЛО!, #ПУСТО! (русская версия Excel).
Дополнительная информация
- Если вы используете кавычки («») в качестве аргумента value_if_error (значение_если_ошибка), ячейка ничего не отображает в случае ошибки.
- Если аргумент value (значение) или value_if_error (значение_если_ошибка) ссылается на пустую ячейку, она рассматривается как пустая.
Примеры использования функции IFERROR (ЕСЛИОШИБКА) в Excel
Пример 1. Заменяем ошибки в ячейке на пустые значения
Если вы используете функции, которые могут возвращать ошибку, вы можете заключить ее в функцию и указать пустое значение, возвращаемое в случае ошибки.
В примере, показанном ниже, результатом ячейки D4 является # DIV/0!.
Для того, чтобы убрать информацию об ошибке в ячейке используйте эту формулу:
=IFERROR(A1/A2,””) — английская версия
=ЕСЛИОШИБКА(A1/A2;»») — русская версия
В данном случае функция проверит, выдает ли формула в ячейке ошибку, и, при её наличии, выдаст пустой результат.
В качестве результата формулы, исправляющей ошибки, вы можете указать любой текст или значение, например, с помощью следующей формулы:
Больше лайфхаков в нашем Telegram Подписаться
=IFERROR(A1/A2,”Error”) — английская версия
=ЕСЛИОШИБКА(A1/A2;»») — русская версия
Если вы пользуетесь версией Excel 2003 или ниже, вы не найдете функцию IFERROR (ЕСЛИОШИБКА). Вместо нее вы можете использовать обычную функцию IF или ISERROR.
Пример 2. Заменяем значения без данных при использовании функции VLOOKUP (ВПР) на “Не найдено”
Когда мы используем функцию VLOOKUP (ВПР), часто сталкиваемся с тем, что при отсутствии данных по каким либо значениям, формула выдает ошибку “#N/A”.
На примере ниже, мы хотим с помощью функции VLOOKUP (ВПР) для выбранных студентов подставить данные из результатов экзамена.
На примере выше, в списке студентов с результатами экзамена нет данных по имени Иван, в результате, при использовании функции VLOOKUP (ВПР), формула нам выдает ошибку.
Как раз в этом случае мы можем воспользоваться функцией IFERROR (ЕСЛИОШИБКА), для того, чтобы результат вычислений выглядел корректно, без ошибок. Добиться этого мы можем с помощью формулы:
=IFERROR(VLOOKUP(D2,$A$2:$B$12,2,0),”Не найдено”) — английская версия
=ЕСЛИОШИБКА(ВПР(D2;$A$2:$B$12;2;0);»Не найдено») — русская версия
Пример 3. Возвращаем значение “0” вместо ошибок формулы
Если у вас нет конкретного значения, которое вы бы хотели использовать для замены ошибок — оставляйте аргумент функции value_if_error (значение_если_ошибка) пустым, как показано на примере ниже и в случае наличия ошибки, функция будет выдавать “0”:
What is IFERROR Function in Excel?
The IFERROR function in Excel checks a formula (or a cell) for errors and returns a specified value in place of the error. This returned value can be a text message, an empty string, a logical value, a number, etc. The errors handled by the function include “#N/A,” “#DIV/0!,” “#NAME?,” and so on.
For example, cells A1, A2, and A3 contain the numbers 24, 35, and 78 respectively. We perform the following tasks in the given sequence:
- To find the minimum number among the listed ones, we enter the formula “=MN(A1:A3)” in cell A4. It returns the “#NAME?” error because the correct function is MIN.
- To return a custom message, we enter the formula “=IFERROR(MN(A1:A3),”incorrect function name”)” in cell A4. It returns the text “incorrect function name” (without the double quotation marks).
In this way, the IFERROR excel function replaces the error message (#NAME?) with a customized text string (incorrect function name).
In Excel, errors are displayed on account of multiple reasons. The IFERROR function detects and deals with these errors the way the user wants.
The purpose of using the IFERROR function is to return a customized and specified result in case a formula evaluates to an error. However, if no error is detected, the function returns the output of the formula.
The IFERROR function is categorized under the Logical functions of Excel.
Table of contents
- What is IFERROR Function in Excel?
- Syntax
- How to Use IFERROR Excel?
- #1–“#N/A” Error
- #2–“#DIV/0!” Error
- #3–“#NAME?” Error
- #4–“#NULL!” Error
- #5–“#NUM!” Error
- #6–“#REF!” Error
- #7–“#VALUE!” Error
- Frequently Asked Questions
- Recommended Articles
- How to Use IFERROR Excel?
Syntax
The syntax of the IFERROR excel function is shown in the following image:
The function accepts the following arguments:
- Value: This is the value to be checked for errors. It can be a cell reference, formula, value or expression.
- Value_if_error: This is the output returned in case an error is found. It can be a text string, blank cell, number, logical value, and so on.
Both the preceding arguments are mandatory.
How to Use IFERROR Excel?
Let us go through some examples to understand how the IFERROR function handles the Excel errorsErrors in excel are common and often occur at times of applying formulas. The list of nine most common excel errors are — #DIV/0, #N/A, #NAME?, #NULL!, #NUM!, #REF!, #VALUE!, #####, Circular Reference.read more. Every example covers one Excel error.
You can download this IFERROR Function Excel Template here – IFERROR Function Excel Template
#1–“#N/A” Error
The following table shows the names of some employees segregated in two columns titled “list of emp A” and “list of emp B.” Every name is written as “name” followed by a number. Some names are common to both the columns, while some are present in just one column.
We want to create an excel listA list can be created in Excel to define a list of items/values as predefined values. It may be created using the Data Validation tool so that users may select from a list rather than entering their own values.read more that separates the common names (present in both the columns) from those absent in the first column (list of emp A). Use the following functions:
- The VLOOKUPThe VLOOKUP excel function searches for a particular value and returns a corresponding match based on a unique identifier. A unique identifier is uniquely associated with all the records of the database. For instance, employee ID, student roll number, customer contact number, seller email address, etc., are unique identifiers.
read more function of Excel must look up values in the first column (list of emp A). - The IFERROR function of Excel must return the text string “name not in list A” for all “#N/A” errors.
The steps to apply the VLOOKUP and IFERROR functions (with reference to the current example) are listed as follows:
Step 1: Enter the following VLOOKUP formula in cell C2.
“=VLOOKUP(B2,$A:$A,1,0)”
Press the “Enter” key. Drag the formula downwards till the cell C18. The output of the VLOOKUP formula is shown in column C of the following image.
The VLOOKUP formula looks for a name of column B in column A. It returns the “#N/A” error (in column C) for the names that are absent in column A. Such names could not be found in column A as they are present only in column B.
Step 2: Replace the “#N/A” errors (shown in column C of the preceding image) with the text string “name not in list A.” For this, enter the following formula in cell C2.
“=IFERROR(VLOOKUP(B2,$A:$A,1,0),”Name not in list A”)”
Press the “Enter” key. Drag the IFERROR formula till cell C18.
For the ease of understanding, we have displayed the formulas of column C in the succeeding image. Some cells of column C are shown in green. These are the ones that had returned the “#N/A” error in the preceding step (step 1).
The formula “VLOOKUP(B2,$A:$A,1,0)” becomes the first argument and the string “name not in list A” becomes the second argument of the IFERROR function.
The IFERROR function checks the first argument for an error. If the VLOOKUP formula evaluates to an error, the second argument of the IFERROR function is returned. It has already been stated that the VLOOKUP formula evaluates to an error if the lookup value is not found in column A.
Step 3: The output of the IFERROR formula appears in column C, as shown in the succeeding image.
The IFERROR function returns the name if the VLOOKUP formula does not evaluate to an error. However, if the VLOOKUP formula does evaluate to an error, the IFERROR function returns the string “name not in list A.”
In this way, all the “#N/A” errors have been replaced by the text string “name not in list A.” This string implies that the particular name is not in list A (column A).
Hence, “name 20,” “name 35,” “name 21,” “name 31,” and “name 32” are present in column B but not in column A. The names common to both the columns (shown without color) have been separated (in column C) from those absent in column A (shown in green).
#2–“#DIV/0!” Error
The following table shows some amounts (in $) in the first column titled “amount.” We want to distribute every amount equally among the corresponding number of people mentioned in the second column named “to divide amongst.”
Use the following formulas or functions:
- The division formula must divide the amounts among the stated number of people.
- The IFERROR function must return the text string “no of person < 1” for all “#DIV/0!” errors.
The steps to apply the division formula and the IFERROR function are listed as follows:
Step 1: Enter the following division formula in cell C2.
“=amount/number of people” or “A2/B2”
Press the “Enter” key. Drag the formula downwards till cell C6. The output of the division formula is shown in column C of the following image.
Cell C4 shows the “#DIV/0!” error because the number of people (in cell B4), i.e., the denominator is zero.
Note: In Excel, any number divided by zero returns the “#DIV/0!” error.
Step 2: To replace the “#DIV/0!” error with the text string “no of person < 1,” enter the following formula in cell C2.
“=IFERROR((A2/B2),”No of Person < 1″)”
Press the “Enter” key. Drag the formula till cell C6. The output appears in column C, as shown in the following image.
In cases where the argument “A2/B2” does not evaluate to an error, the IFERROR formula returns the amount (in column C). Wherever the first argument (A2/B2) evaluates to an error, the text string “no of person < 1” is returned. This text string (in cell C4) implies that the number of persons among which $6,000 is to be divided is less than 1.
Hence, the amounts listed in column A have been divided among the number of people stated in column B. The amount received by each person is stated in column C.
#3–“#NAME?” Error
The following list shows some numbers to be added. Use the following functions:
- The SUM function in ExcelThe SUM function in excel adds the numerical values in a range of cells. Being categorized under the Math and Trigonometry function, it is entered by typing “=SUM” followed by the values to be summed. The values supplied to the function can be numbers, cell references or ranges.read more must sum the given numbers.
- The IFERROR function of Excel must return the text string “typed wrong formula” for all “#NAME?” errors.
The steps to apply the SUM and the IFERROR function are listed as follows:
Step 1: Enter the following formula in cell C2.
“=SU(A2:A9)”
The same is shown in the succeeding image.
Press the “Enter” key. The “#NAME?” error appears in cell C2. This is because we have mistakenly entered the function name as “SU” instead of “SUM.”
Step 2: To replace the “#NAME?” error with the text string “typed wrong formula,” enter the following formula in cell C2.
“=IFERROR(SU(A2:A9),”Typed Wrong Formula”)”
Press the “Enter” key. The formula is shown in the following image.
Step 3: The output appears in cell C2 of the following image. Hence, the IFERROR function has returned the text string “typed wrong formula” in cell C2. This string implies that the name of the function (SUM) has been typed incorrectly.
The given text string is returned because there is an error in the first argument [SU(A2:A9)] of the IFERROR function. Had we entered the correct function name (SUM), the output of the IFERROR formula (in cell C2) would have been the sum of the listed numbers, i.e., 180.
#4–“#NULL!” Error
The following list shows three numbers in the range A2:A4. We want to sum the numbers using the following formulas or functions:
- The arithmetic operator “plus” (+) must be used to add the numbers in cells A2, A3, and A4.
- The IFERROR function must return the total of the listed numbers.
The steps to use the plus sign (+) and the IFERROR function are listed as follows:
Step 1: Enter the following formula in cell A5.
“=A2+A3 A4”
Press the “Enter” key. The “#NULL!” error appears in cell A5, as shown in the following image. This error appears because we have forgotten to enter the relevant arithmetic operator before the reference A4. Rather, we have mistakenly entered a space before A4.
Step 2: To replace the “#NULL!” error with the total of the listed numbers in column A, enter the following formula in cell A5.
“=IFERROR((A2+A3 A4),(SUM(A2:A4)))”
Press the “Enter” key.
The first argument, “A2+A3 A4,” is checked for an error. The second argument, “SUM(A2:A4),” is the “value_if_error.” This implies that if the first argument evaluates to an error, the function returns the output of the second argument “SUM(A2:A4).”
Hence, the IFERROR formula returns the sum 600 in cell A5, as shown in the following image.
#5–“#NUM!” Error
The following list shows some numbers. We want to find the square roots of these numbers. Use the following functions:
- The SQRT function in Excel must calculate the square roots of the given numbers.
- The IFERROR function must return the text string “a negative number” for all “#NUM!” errors.
The steps to apply the SQRT FunctionThe Square Root function is an arithmetic function built into Excel that is used to determine the square root of a given number. To use this function, type the term =SQRT and hit the tab key, which will bring up the SQRT function. Moreover, this function accepts a single argument.read more and the IFERROR functions are listed as follows:
Step 1: Enter the following SQRT formula in cell B2.
“=SQRT(A2)”
Press the “Enter” key. Drag the formula downwards till cell B8. The output of the SQRT function is shown in column B of the following image.
The SQRT function helps calculate the square root of a number. However, the square root of a negative number does not exist. So, the SQRT function returns “#NUM!” errors for such numbers.
Step 2: To replace the “#NUM!” errors with the text string “a negative number,” enter the following formula in cell B2.
“=IFERROR(SQRT(A2),”A Negative Number”)”
Press the “Enter” key. Drag the formula till cell B8. The output of the formula is shown in column B of the following image.
The IFERROR function returns the result of the SQRT formula for all positive numbers. For the negative numbers, the IFERROR function returns the text “a negative number.” This text string notifies the user that the number whose square root needs to be found is negative.
Hence, the square roots of the listed numbers have been calculated and the resulting “#NUM!” errors have been replaced with a custom message (a negative number).
#6–“#REF!” Error
The following image shows two numbers in cells A2 and A3. These numbers have been divided with the help of the formula (=A2/A3) entered in cell C2. We want to delete row 3. Use the following techniques and functions:
- The row 3 must be deleted by right-clicking its header and choosing “delete.”
- The IFERROR function of Excel must return the text string “reference deleted” for the “#REF!” errors.
The steps to delete row 3 and apply the IFERROR function are listed as follows:
Step 1: Select row 3 by clicking the header (3) appearing on the leftmost side of the Excel sheet. Right-click the selection and choose “delete” from the context menu.
The row 3 is deleted and the “#REF!” error appears in cell C2, as shown in the following image.
The cell A3 was a part of the formula entered in cell C2. Since Excel is unable to locate the value (or cell reference) of the denominator, it returns the “#REF!” error in cell C2.
Step 2: To replace the “#REF!” error with the string “reference deleted,” enter the following formula in cell C2.
“=IFERROR((A2/#REF!),”Reference Deleted”)”
Press the “Enter” key. The output of the IFERROR formula appears in cell C2 of the following image.
The IFERROR function checks whether the first argument (A2/#REF!) evaluates to an error or not. Since it does return an error, the function returns the second argument (reference deleted) as the output.
The text string “reference deleted” implies that the cell referenceCell reference in excel is referring the other cells to a cell to use its values or properties. For instance, if we have data in cell A2 and want to use that in cell A1, use =A2 in cell A1, and this will copy the A2 value in A1.read more entered in the division formula has been deleted. This text string is the argument “value_if_error.”
Hence, row 3 has been deleted and the resulting “#REF!” error has been replaced by the string “reference deleted.”
#7–“#VALUE!” Error
The following image shows two values in cells A2 and A3. We want to add these values. Use the following formulas or functions:
- The arithmetic operator plus (+) must sum up the given values.
- The IFERROR function must return the text string “text can’t add to number” for the “#VALUE!” errors.
The steps to use the plus symbol (+) and the IFERROR function are listed as follows:
Step 1: Enter the following formula in cell A5.
“=A2+A3”
Press the “Enter” key. The “#VALUE!” error appears in cell A5. This is because cell A2 contains a number while A3 contains a text string. The addition of a numeric and text value has resulted in an error. The same is shown in the following image.
Step 2: To replace the “#VALUE!” error with the text string “text can’t add to number,” enter the following formula in cell A5.
“=IFERROR((A2+A3),”Text Can’t Add to Number”)”
Press the “Enter” key. The output of the IFERROR formula is shown in cell A5 of the following image.
The IFERROR function checks the first argument (A2+A3) for an error. Since this argument does evaluate to an error, the function returns the second argument (text can’t add to number). The text string “text can’t add to number” implies that a text value cannot be added to a numeric value.
Had there been a number in place of the string “bag,” the IFERROR function would have returned the sum of the two numbers.
Hence, since the given values could not be added, the resulting “#VALUE!” error has been replaced by a custom message (text can’t add to number).
Likewise, the IFERROR function can be used for managing errors in Excel. Moreover, the output to be returned (in case of an error) can be customized as per the requirements of the user.
Frequently Asked Questions
1. Define the IFERROR function of Excel.
The IFERROR function detects and handles the various types of Excel errors like “#N/A,” “#DIV/0!,” “#REF!,” “#VALUE!,” and so on. In place of these errors, the function returns a text message, number, empty string, logical value, etc.
The syntax of the IFERROR function of Excel is stated as follows:
“IFERROR(value,value_if_error)”
The first argument “value” is checked for errors. The second argument, “value_if_error,” is returned in case an error is found in the first argument. Both the arguments of the IFERROR function are mandatory.
2. When is the IFERROR function used and how does it work in Excel?
The IFERROR function is used in the following situations:
a. To capture the error and notify its presence to the user
b. To tell Excel what is to be done in case the first argument runs into an error
c. To replace the error with a customized message
The IFERROR function works as follows:
a. The function checks the first argument for errors.
b. In case the first argument does evaluate to an error, the function returns a predefined response. This response is entered as the second argument in the function.
c. In case the first argument does not run into an error, the function returns the result of the first argument.
3. How does the IFERROR function return a blank cell in Excel?
To return a blank cell, an empty string needs to be entered in the second argument of the IFERROR function. For example, two cells contain the following values:
• Cell A1 contains 20
• Cell A2 contains 0
Enter the formula “=IFERROR(A1/A2,””) in cell B1. After pressing the “Enter” key, it returns an empty cell (B1).
As long as cell A2 contains zero, the given IFERROR formula returns a blank cell. This is because the formula identifies division by zero as an error. The moment a value is entered in cell A2, the IFERROR formula returns the result of A1/A2.
Had A1 been a blank cell and A2 contained 20, the formula “=IFERROR(A1/A2,“no message”) would have returned 0. This is because the formula does not identify a blank cell in the numerator as an error. Hence, it returns the result of the first argument.
Recommended Articles
This has been a guide to IFERROR Excel function. We discuss how to handle excel errors (#DIV/0, #N/A, #NAME?, #NULL!, #NUM!, #REF!, #VALUE!,) with examples. You may also look at these useful functions of Excel –
- IFERROR with VLOOKUP in ExcelIFERROR is an error-handling function and Vlookup is a referencing function. They’re combined and used so that when Vlookup encounters an error while finding or matching the data, the formula must know what to do. Vlookup function is nested in the iferror function.read more
- VBA IFERRORThe IFERROR function in Excel is used to determine what to do when an error occurs before performing any function.read more
- VLOOKUP Errors
- ISERROR in ExcelISERROR is a logical function that determines whether or not the cells being referred to have an error. If an error is found, it returns TRUE; if no errors are found, it returns FALSE.read more
The #NUM! error is a frequent visitor on your worksheet. This can make you want to pull your hair out if you’ve used the output cell as a reference in another formula.
Looking for a fix? ExcelTrick has it for you.
What is a #NUM! Error in Excel?
#NUM! error occurs when you’ve entered a formula in your worksheet, but it can’t perform the calculation. For instance, say you’re trying to find square roots for a list of numbers. But there’s a negative value in the list. The formula will return a #NUM error for this value since it’s impossible to find the square root of a negative number.
But that’s not the only reason that can invite a #NUM! error into your worksheet. There are four possibilities that could be the reason for your perils. Fixing the error typically requires adjusting the values (no, it’s not mechanical, but an arithmetic error), and you’ll be set in no time.
Why Does it Appear?
So, why do #NUM! errors occur? Yes, as mentioned, there are four reasons. Let’s talk about them in a little more detail.
We already talked about the first reason in the previous section. If you’re trying to perform an impossible calculation, for instance, finding the square root of a negative number, you’ll get a #NUM! error.
The second reason could be that the output is too large or too small. The smallest and largest numbers that Excel can handle are -1*10^308 and 1*10^308, respectively. Excel displays any output outside this range as a #NUM! error.
The third reason could be that you’ve used an iterative formula that’s not finding a result. For instance, if you’re doing some capital budgeting and you’ve used the IRR formula in the process, and you see a #NUM! error, check the IRR formula. The IRR formula tries to calculate an answer that’s accurate down to 0.00001%. It tries to run about 20 iterations to find the answer. If it doesn’t, it returns the #NUM! error.
The fourth reason could be that you’ve entered an argument incorrectly in your function. For instance, think about the DATEDIF function. Things are all smooth sailing with this delightfully simple function, unless you mistakenly enter a start date that falls after the end date.
Sounds good? Perfect, let’s now try to look at how each of these reasons could play out on your worksheet and how to fix them with examples.
Examples
Following are some examples of when you’d see a #NUM! error.
1. Fixing #NUM! error when the calculation is impossible
When you’ve inadvertently asked Excel to perform an impossible calculation, you’ll see a #NUM! error. But the fix is, well, to make the calculation possible.
Let’s use the square root problem we discussed earlier. Say you’ve got some numbers in a list that you want a square root of, and you’ve applied the following formula to the numbers.
=SQRT(A2)
A negative number has sneaked into your list and caused a #NUM! error on your other spotless spreadsheet.
Once you’ve calmed yourself down from the panic of seeing the #NUM! error, think rationally. Since it’s impossible to find the square root of a negative number, you need to make it positive. The way to make it positive? The ABS function.
Here’s the formula you should use to fix the #NUM! error.
=SQRT(ABS(A2))
The ABS function converts the negative value into a positive one. When you enter a positive value into the SQRT function, everything should work fine. Easy-peasy, eh?
2. Fixing #NUM! error when the number is too large or small
The thing is… you can’t really fix this. If your output is too large or small for Excel, you’ll need to change your input to bring the output value within the acceptable range. For instance, say you’ve performed the following arithmetic operation in your Excel sheet:
=100^500
Now, there’s no chance that Excel will be able to display this value, and will therefore return a #NUM! error. There’s no way to display the result, so you’ll need to change the output.
3. Fixing #NUM! error resulting from an iteration formula
Functions like IRR can sometimes also lead to a #NUM error. Such errors are mainly because of two reasons:
- The specified Cash flow does not contain at least one negative and one positive value.
- Formula can’t find a result.
Let’s take the first case first.
In this example, we have listed down our cash flows within the range B2:B13. Now we will try to calculate the IRR using the formula below:
=IRR(B2:B13)
As we can see in the image above, excel returns a #NUM! error. The reason is pretty simple – the IRR function requires at least one negative value in the range as the initial cost of business.
So, in order to fix such an error, we can simply add our initial cost of business as a negative value to the cashflow range and the IRR function will display a valid result.
Another case, when the IRR function returns a #NUM error is when the function iterates and can’t find a result after several tries. We know that formulas like IRR and XIRR run several iterations to find an accurate answer.
However, Excel caps the number of iterations that these formulas go through so they’re not stuck in an infinite loop. When the formula maxes out the iterations without finding an answer, it returns a #NUM! error.
To overcome this, you have the option to increase the maximum number of iterations that Excel allows to get the result.
To increase the number of allowed iterations:
- Navigate to File > Options > Formulas to arrive at the window below
- Under the Calculation options group, check the Enable iterative calculation checkbox.
- In the Maximum Iterations textbox, enter the number of times you want Excel to perform iterations. Please note that – The higher the number of iterations, the more time and resources Excel might need to consume to display the result.
4. Fixing #NUM! error when you’ve entered an incorrect function argument
You can guess the fix before even looking through the example, can’t you? All you need to do is just enter the arguments correctly. Let’s look at how this will pan out practically.
Say you’ve got a few dates listed in two columns, and you’ve decided to find the differences between those dates. You remember reading our DATEDIF function tutorial, but you make a tiny mistake.
Understandable, right? If you read the DATEDIF tutorial carefully, you’ll see that Excel doesn’t show you the arguments you need to input as you type the formula, so this could be an easy mistake.
You use the start date as the end date and vice versa while applying the formula. So, you’ve incorrectly used the following formula.
=DATEDIF(B2,A2,"d")
The fix is simply to enter the arguments correctly into the formula, and that should eliminate the #NUM! error from your worksheet.
=DATEDIF(A2,B2,"d")
That’s all the ways you can deal with the #NUM! error whenever you find it on your worksheets. Child’s walk, right? While you champion eliminating #NUM! errors, we’ve got some more tutorials lined up for you. When you’re done, you know where to find us.
Return value
The value you specify for error conditions.
Usage notes
The IFERROR function is used to catch errors and return a more friendly result or message when an error is detected. When a formula returns a normal result, the IFERROR function returns that result. When a formula returns an error, IFERROR returns an alternative result. IFERROR is an elegant way to trap and manage errors. The IFERROR function is a modern alternative to the ISERROR function.
Use the IFERROR function to trap and handle errors produced by other formulas or functions. IFERROR checks for the following errors: #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, or #NULL!.
Example #1
In the example shown, the formula in E5 copied down is:
=IFERROR(C5/D5,0)
This formula catches the #DIV/0! error that occurs when Qty is empty or zero, and replaces it with zero.
Example #2
For example, if A1 contains 10, B1 is blank, and C1 contains the formula =A1/B1, the following formula will catch the #DIV/0! error that results from dividing A1 by B1:
=IFERROR (A1/B1,"Please enter a value in B1")
As long as B1 is empty, C1 will display the message «Please enter a value in B1» if B1 is blank or zero. When a number is entered in B1, the formula will return the result of A1/B1.
Example #3
You can also use the IFERROR function to catch the #N/A error thrown by VLOOKUP when a lookup value isn’t found. The syntax looks like this:
=IFERROR(VLOOKUP(value,data,column,0),"Not found")
In this example, when VLOOKUP returns a result, IFERROR functions that result. If VLOOKUP returns #N/A error because a lookup value isn’t found, IFERROR returns «Not Found».
IFERROR or IFNA?
The IFERROR function is a useful function, but it is a blunt instrument since it will trap many kinds of errors. For example, if there’s a typo in a formula, Excel may return the #NAME? error, but IFERROR will suppress the error and return the alternative result. This can obscure an important problem. In many cases, it makes more sense to use the IFNA function, which only traps the #N/A error.
Other error functions
Excel provides a number of error-related functions, each with a different behavior:
- The ISERR function returns TRUE for any error type except the #N/A error.
- The ISERROR function returns TRUE for any error.
- The ISNA function returns TRUE for #N/A errors only.
- The ERROR.TYPE function returns the numeric code for a given error.
- The IFERROR function traps errors and provides an alternative result.
- The IFNA function traps #N/A errors and provides an alternative result.
Notes
- If value is empty, it is evaluated as an empty string («») and not an error.
- If value_if_error is supplied as an empty string («»), no message is displayed when an error is detected.
- In Excel 2013+, you can use the IFNA function to trap and handle #N/A errors specifically.
Ошибка #ЧИСЛО в Excel не является сильно распространённой, однако если вы ее встретили в своей работе, то прочитав эту статью, вы узнаете основные причины и методы исправления ошибки #ЧИСЛО в Excel.
Эта ошибка в Excel означает что число, указанное в качестве параметра какой-либо функции, является для нее недопустимой. Рассмотрим несколько примеров.
Пример 1. Квадратный корень из отрицательного числа
Давайте зададим в качестве примера число -10 и попробуем извлечь из него корень при помощи функции КОРЕНЬ():
Мы получили ошибку #ЧИСЛО. Причиной этого является то, что по правилам математики извлекать квадратный корень мы можем только из положительных чисел. Если мы исправим число -10 на 10, то ошибка пропадет:
Пример 2. Очень большие числа
Давайте попробуем число 999 возвести в 999 степень:
Мы снова получили ошибку #ЧИСЛО, в данном случае это связано с тем, что у Excel есть ограничение на размер чисел, с которыми он может оперировать. Исправить такую ситуацию средствами Excel нельзя и если вам необходимо вычислять результаты таких операций, то необходимо воспользоваться специализированным программным обеспечением.
Пример 3. Длительные итерационные вычисления
В случае, если ваша функция вычисляет результат итерационным методом перебора подходящих значений, к примеру функция «Подбор параметра», то в случае, если результат не может быть рассчитан в течении долгого времени, то вы получите ошибку #ЧИСЛО.
Для того, чтобы ее исправить, вам необходимо либо увеличить количество итераций (это соответственно повлияет на продолжительность расчета), либо снизить точность вычислений (подходит для ситуаций, когда высокая точность не требуется).
Зайдите в Excel в меню «Файл» и выберите пункт «Параметры». Далее в открывшемся окне перейдите в пункт «Формулы», в правом верхнем углу вы сможете изменить точность и количество итераций при вычислениях.
Отлично, мы рассмотрели основные причины возникновения ошибки #ЧИСЛО в Excel и методы ее устранения. Об этом и многих других возможностях Excel вы сможете подробнее ознакомиться на курсе «
Excel + Google Таблицы с нуля до PRO
» от Skillbox. В нем вы научитесь работать в экселе как настоящий профессионал, тем самым повысив свою производительность и ценность как для себя, так и для работодателя.
На чтение 25 мин. Просмотров 15.6k.
Эта статья содержит полное руководство по обработке ошибок VBA. Если вы ищете краткое резюме, посмотрите таблицу быстрого руководства в первом разделе.
Если вы ищете конкретную тему по обработке ошибок VBA, ознакомьтесь с приведенным ниже содержанием.
Если вы новичок в VBA, то вы можете прочитать пост от начала до конца, так как он выложен в логическом порядке.
Содержание
- Краткое руководство по обработке ошибок
- Введение
- Ошибки VBA
- Заявление об ошибке
- Err объект
- Логирование
- Другие элементы, связанные с ошибками
- Простая стратегия обработки ошибок
- Полная стратегия обработки ошибок
- Обработка ошибок в двух словах
Краткое руководство по обработке ошибок
Пункт | Описание |
On Error Goto 0 | При возникновении ошибки код останавливается и отображает ошибку. |
On Error Resume Next | Игнорирует ошибку и продолжает. |
On Error Goto [Label] | Переход к определенной метке при возникновении ошибки. Это позволяет нам справиться с ошибкой. |
Err Object | При возникновении ошибки информация об ошибке сохраняется здесь. |
Err.Number | Номер ошибки. (Полезно, только если вам нужно проверить, произошла ли конкретная ошибка.) |
Err.Description | Содержит текст ошибки. |
Err.Source | Вы можете заполнить это, когда используете Err.Raise. |
Err.Raise | Функция, которая позволяет генерировать вашу собственную ошибку. |
Error Function | Возвращает текст ошибки из номера ошибки. Вышло из употребления. |
Error Statement | Имитирует ошибку. Вместо этого используйте Err.Raise. |
Введение
Обработка ошибок относится к коду, который написан для обработки ошибок, возникающих во время работы вашего приложения. Эти ошибки обычно вызваны чем-то вне вашего контроля, например отсутствующим файлом, недоступностью базы данных, недействительными данными и т.д.
Если мы считаем, что ошибка может произойти в какой-то
момент, рекомендуется написать специальный код для обработки ошибки, если она
возникнет, и устранить ее.
Для всех остальных ошибок мы используем общий код для их
устранения. Это где оператор обработки ошибок VBA вступает в игру. Они
позволяют нашему приложению корректно обрабатывать любые ошибки, которые мы не
ожидали.
Чтобы понять обработку ошибок, мы должны сначала понять
различные типы ошибок в VBA.
Ошибки VBA
В VBA есть три типа ошибок
- Синтаксис
- Компиляция
- Время выполнения
Мы используем обработку ошибок для устранения ошибок во
время выполнения. Давайте посмотрим на каждый из этих типов ошибок, чтобы было
ясно, что такое ошибка во время выполнения.
Синтаксические ошибки
Если вы использовали VBA в течение какого-то времени, вы
увидите синтаксическую ошибку. Когда вы набираете строку и нажимаете return,
VBA оценивает синтаксис и, если он неверен, выдает сообщение об ошибке.
Например, если вы введете If и забудете ключевое слово Then,
VBA отобразит следующее сообщение об ошибке.
Некоторые примеры синтаксических ошибок
' then отсутствует If a > b ' не хватает = после i For i 2 To 7 ' отсутствует правая скобка b = left("АБВГ",1
Синтаксические ошибки относятся только к одной строке. Они
возникают, когда синтаксис одной строки неверен.
Примечание. Диалоговое окно «Ошибка синтаксиса» можно отключить, выбрав «Сервис» -> «Параметры» и отметив «Автосинтаксическая проверка». Строка по-прежнему будет отображаться красным цветом в случае ошибки, но диалоговое окно не появится.
Ошибки компиляции
Ошибки компиляции происходят более чем в одной строке.
Синтаксис в одной строке правильный, но неверный, если учесть весь код проекта.
Примеры ошибок компиляции:
- Оператор If без соответствующего оператора End If
- For без Next
- Select без End Select
- Вызов Sub или Function, которые не существуют
- Вызов Sub или Function с неверными параметрами
- Присвоение Sub или Function того же имени, что и для модуля
- Переменные не объявлены (Option Explicit должен присутствовать в верхней части модуля)
На следующем снимке экрана показана ошибка компиляции,
которая возникает, когда цикл For не имеет соответствующего оператора Next.
Использование Debug-> Compile
Чтобы найти ошибки компиляции, мы используем Debug->
Compile VBA Project из меню Visual Basic.
Когда вы выбираете Debug-> Compile, VBA отображает первую
обнаруженную ошибку.
Когда эта ошибка исправлена, вы можете снова запустить
Compile, и VBA найдет следующую ошибку.
Debug-> Compile также будет включать синтаксические
ошибки в поиск, что очень полезно.
Если ошибок не осталось и вы запускаете Debug-> Compile,
может показаться, что ничего не произошло. Однако «Компиляция» будет недоступна
в меню «Отладка». Это означает, что ваше приложение не имеет ошибок компиляции
в текущий момент.
Debug->Compile Error Summary
Debug-> Compile находит ошибки компиляции (проекта).
Он также найдет синтаксические ошибки.
Он находит одну ошибку каждый раз, когда вы ее используете.
Если нет ошибок компиляции, оставленная опция Компиляция
будет отображаться серым цветом в меню.
Debug-> Compile Usage
Вы должны всегда использовать Debug-> Compile, прежде чем
запускать свой код. Это гарантирует, что ваш код не будет иметь ошибок
компиляции при запуске.
Если вы не запускаете Debug-> Compile, то VBA может
обнаружить ошибки компиляции при запуске. Их не следует путать с ошибками
времени выполнения.
Ошибки во время выполнения
Ошибки во время выполнения возникают, когда ваше приложение
работает. Обычно они находятся вне вашего контроля, но могут быть вызваны
ошибками в вашем коде.
Например, представьте, что ваше приложение читает из внешней
рабочей книги. Если этот файл будет удален, то VBA отобразит ошибку, когда ваш
код попытается открыть его.
Другие примеры ошибок времени выполнения
- база данных недоступна
- пользователь вводит неверные данные
- ячейка, содержащая текст вместо числа
Как мы уже видели, целью обработки ошибок является обработка
ошибок времени выполнения, когда они возникают.
Ожидаемые и неожиданные ошибки
Когда мы думаем, что может произойти ошибка во время
выполнения, мы помещаем код на место для ее обработки. Например, мы обычно
помещаем код на место, чтобы иметь дело с файлом, который не найден.
Следующий код проверяет, существует ли файл, прежде чем он
пытается его открыть. Если файл не существует, отображается сообщение, удобное
для пользователя, и код выходит из подпрограммы.
Sub OtkritFail() Dim sFile As String sFile = "C:ДокументыОтчет.xlsx" ' Используйте Dir, чтобы проверить, существует ли файл If Dir(sFile) = "" Then ' если файл не существует, отобразить сообщение MsgBox "Файл не найден" & sFile Exit Sub End If ' Код достигнет только если файл существует Workbooks.Open sFile End Sub
Когда мы думаем, что в какой-то момент может произойти
ошибка, рекомендуется добавить код для обработки ситуации. Мы обычно называем
эти ошибки ожидаемыми.
Если у нас нет специального кода для обработки ошибки, это
считается неожиданной ошибкой. Мы используем операторы обработки ошибок VBA для
обработки непредвиденных ошибок.
Ошибки времени выполнения, которые не являются ошибками VBA
Прежде чем мы рассмотрим VBA Handling, мы должны упомянуть
один тип ошибок. Некоторые ошибки во время выполнения не рассматриваются как
ошибки VBA, а только пользователем.
Позвольте мне объяснить это на примере. Представьте, что у
вас есть приложение, которое требует, чтобы вы добавили значения в переменные a
и b
Допустим, вы по ошибке используете звездочку вместо знака
плюс
Это не ошибка VBA. Ваш синтаксис кода является совершенно
законным. Однако, с вашей точки зрения, это ошибка.
Эти ошибки не могут быть обработаны с помощью обработки ошибок, поскольку они, очевидно, не будут генерировать никаких ошибок. Вы можете справиться с этими ошибками, используя Unit Testing and Assertions.
Заявление об ошибке
Как мы видели, есть два способа обработки ошибок во время
выполнения
- Ожидаемые ошибки — напишите конкретный код для
их обработки. - Неожиданные ошибки — используйте операторы
обработки ошибок VBA для их обработки.
Оператор VBA On Error используется для обработки ошибок.
Этот оператор выполняет некоторые действия при возникновении ошибки во время
выполнения.
Есть четыре различных способа использовать это утверждение
- On Error Goto 0 — код останавливается на строке с ошибкой и отображает сообщение.
- On Error Resume Next — код перемещается на следующую строку. Сообщение об ошибке не отображается.
- On Error Goto [label] — код перемещается на определенную строку или метку. Сообщение об ошибке не отображается. Это тот, который мы используем для обработки ошибок.
- On Error Goto -1 — очищает текущую ошибку.
Давайте посмотрим на каждое из этих утверждений по очереди.
On Error Goto 0
Это поведение по умолчанию VBA. Другими словами, если вы не
используете On Error, это поведение вы увидите.
При возникновении ошибки VBA останавливается на строке с
ошибкой и отображает сообщение об ошибке. Приложение требует вмешательства
пользователя с кодом, прежде чем оно сможет продолжить. Это может быть
исправление ошибки или перезапуск приложения. В этом случае обработка ошибок не
происходит.
Давайте посмотрим на пример. В следующем коде мы не
использовали строку On Error, поэтому VBA будет использовать поведение On Error
Goto 0 по умолчанию.
Sub IspDefault() Dim x As Long, y As Long x = 6 y = 6 / 0 x = 7 End Sub
Вторая строка присваивания приводит к ошибке деления на ноль. Когда мы запустим этот код, мы получим сообщение об ошибке, показанное на скриншоте ниже.
Когда появляется ошибка, вы можете выбрать End или Debug
Если вы выберете Конец, то приложение просто остановится.
Если вы выберете Отладить, приложение остановится на строке
ошибки, как показано на скриншоте ниже.
Это нормально, когда вы пишете код VBA, поскольку он
показывает вам точную строку с ошибкой.
Это поведение не подходит для приложения, которое вы
передаете пользователю. Эти ошибки выглядят непрофессионально и делают
приложение нестабильным.
Подобная ошибка, по сути, приводит к сбою приложения.
Пользователь не может продолжить работу без перезапуска приложения. Они могут
вообще не использовать его, пока вы не исправите для них ошибку.
Используя On Error Goto [label], мы можем дать пользователю
более контролируемое сообщение об ошибке. Это также предотвращает остановку
приложения. Мы можем заставить приложение работать предопределенным образом.
On Error Resume Next
Использование On Error Resume Next указывает VBA
игнорировать ошибку и продолжать работу.
Есть конкретные случаи, когда это полезно. Большую часть
времени вы должны избегать его использования.
Если мы добавим Resume Next к нашему примеру Sub, то VBA
проигнорирует ошибку деления на ноль
Sub UsingResumeNext() On Error Resume Next Dim x As Long, y As Long x = 6 y = 6 / 0 x = 7 End Sub
Это не очень хорошая идея, чтобы сделать это. Если вы
игнорируете ошибку, то поведение может быть непредсказуемым. Ошибка может
повлиять на приложение несколькими способами. Вы можете получить неверные
данные. Проблема в том, что вы не знаете, что что-то пошло не так, потому что
вы подавили ошибку.
Приведенный ниже код является примером использования Resume
Next.
Sub OtprSoobsch() On Error Resume Next ' Требуется ссылка: ' Библиотека объектов Microsoft Outlook 15.0 Dim Outlook As Outlook.Application Set Outlook = New Outlook.Application If Outlook Is Nothing Then MsgBox " Не удается создать сеанс Microsoft Outlook." _ & " Письмо не будет отправлено." Exit Sub End If End Sub
В этом коде мы проверяем, доступен ли Microsoft Outlook на компьютере. Все,
что мы хотим знать — это доступно или нет. Нас не интересует конкретная ошибка.
В приведенном выше коде мы продолжаем, если есть ошибка.
Затем в следующей строке мы проверяем значение переменной Outlook. Если произошла ошибка, тогда
значение этой переменной будет установлено равным Nothing.
Это пример того, когда Резюме может быть полезным. Дело в
том, что, хотя мы используем Resume,
мы все равно проверяем наличие ошибки. Подавляющее большинство времени вам не
нужно будет использовать Resume.
On Error Goto [label]
Вот как мы используем обработку ошибок в VBA. Это эквивалент функциональности Try and Catch, которую вы видите на
таких языках, как C # и
Java.
При возникновении ошибки вы отправляете ошибку на
определенный ярлык. Обычно это внизу саба.
Давайте применим это к подводной лодке, которую мы
использовали
Sub IspGotoLine() On Error Goto eh Dim x As Long, y As Long x = 6 y = 6 / 0 x = 7 Done: Exit Sub eh: MsgBox "Произошла следующая ошибка: " & Err.Description End Sub
Снимок экрана ниже показывает, что происходит при возникновении ошибки.
VBA переходит на метку eh, потому что мы указали это в
строке «Перейти к ошибке».
Примечание 1: Метка, которую мы используем в операторе On… Goto, должна быть в текущей Sub / Function. Если нет, вы получите ошибку компиляции.
Примечание 2: Когда возникает ошибка при использовании On Error Goto [label], обработка ошибок возвращается к поведению по умолчанию, т.е. код остановится на строке с ошибкой и отобразит сообщение об ошибке. См. Следующий раздел для получения дополнительной информации об этом.
On Error Goto -1
Это утверждение отличается от других трех. Он используется
для очистки текущей ошибки, а не для настройки конкретного поведения.
При возникновении ошибки с помощью функции On Error Goto [label] поведение обработки ошибки возвращается к поведению по умолчанию, т.е. On Error Goto 0 . Это означает, что если произойдет другая ошибка, код остановится на текущей строке.
Это поведение относится только к текущей подпрограмме. Как
только мы выйдем из саба, ошибка будет очищена автоматически.
Посмотрите на код ниже. Первая ошибка приведет к переходу
кода на метку eh. Вторая ошибка остановится на строке с ошибкой 1034.
Sub DveOshibki() On Error Goto eh ' генерировать ошибку «Несоответствие типов» Error (13) Done: Exit Sub eh: ' генерировать «определенную приложением» ошибку Error (1034) End Sub
Если мы добавим дальнейшую обработку ошибок, она не будет
работать, поскольку ловушка ошибок не была очищена.
В коде ниже мы добавили строку
после того как мы поймаем первую ошибку.
Это не имеет никакого эффекта, так как ошибка не была
очищена. Другими словами, код остановится на строке с ошибкой и отобразит
сообщение.
Sub DveOshibki() On Error Goto eh ' генерировать ошибку «Несоответствие типов» Error (13) Done: Exit Sub eh: On Error Goto eh_other ' генерировать «определенную приложением» ошибку Error (1034) Exit Sub eh_other: Debug.Print "ehother " & Err.Description End Sub
Для устранения ошибки мы используем On Error Goto -1.
Думайте об этом как об установке ловушки для мыши. Когда ловушка сработает, вам
нужно установить ее снова.
В приведенном ниже коде мы добавляем эту строку, и вторая
ошибка теперь приведет к переходу кода на метку eh_other.
Sub DveOshibki() On Error Goto eh ' генерировать ошибку «Несоответствие типов» Error (13) Done: Exit Sub eh: ' явная ошибка On Error Goto -1 On Error Goto eh_other ' генерировать «определенную приложением» ошибку Error (1034) Exit Sub eh_other: Debug.Print "ehother " & Err.Description End Sub
Примечание 1. Вероятно, в редких случаях полезно использовать On Error Goto -1. Мне лично никогда не приходилось пользоваться этой линией. Помните, что как только вы выйдете из Sub, ошибка все равно будет очищена.
Примечание 2. у объекта Err есть член Clear. Использование Clear очищает текст и цифры в объекте Err, но НЕ сбрасывает ошибку.
Использование On Error
Как мы уже видели, VBA будет делать одну из трех вещей при возникновении ошибки:
- Остановитесь и отобразите ошибку.
- Игнорируйте ошибку и продолжайте.
- Перейти к определенной строке.
VBA всегда будет настроен на одно из этих действий. Когда вы
используете On Error, VBA изменит ваше поведение и забудет о любом предыдущем.
В следующем подпункте VBA изменяет поведение ошибки каждый
раз, когда мы используем оператор On Error
Sub ErrorSostoyaniya() Dim x As Long ' Перейти на этикетке, если ошибка On Error Goto eh ' это проигнорирует ошибку в следующей строке On Error Resume Next x = 1 / 0 ' это отобразит сообщение об ошибке в следующей строке On Error Goto 0 x = 1 / 0 Done: Exit Sub eh: Debug.Print Err.Description End Sub
Err объект
При возникновении ошибки вы можете просмотреть детали
ошибки, используя объект Err.
При возникновении ошибки времени выполнения VBA
автоматически заполняет объект Err деталями.
Приведенный ниже код выведет «Error Number: 13 Type
Mismatch», которое возникает, когда мы пытаемся поместить строковое значение в
длинное целое число.
Sub IspErr() On Error Goto eh Dim total As Long total = "aa" Done: Exit Sub eh: Debug.Print "Номер ошибки: " & Err.Number _ & " " & Err.Description End Sub
Err.Description предоставляет подробную информацию об ошибке, которая происходит. Это текст, который вы обычно видите, когда возникает ошибка, например, «Несоответствие типов»
Err.Number — это идентификационный номер ошибки, например, номер ошибки для «Несоответствие типов» — 13. Единственное время, когда вам действительно нужно это, если вы проверяете, что произошла конкретная ошибка, и это необходимо только в редких случаях.
Свойство Err.Source кажется отличной идеей, но оно не работает при ошибке VBA. Источник вернет имя проекта, которое вряд ли сузит место возникновения ошибки. Однако, если вы создаете ошибку с помощью Err.Raise, вы можете установить источник самостоятельно, и это может быть очень полезно.
Получение номера строки
Функция Erl используется для возврата номера строки, где
произошла ошибка.
Это часто вызывает путаницу. В следующем коде Erl вернет ноль.
Sub IspErr() On Error Goto eh Dim val As Long val = "aa" Done: Exit Sub eh: Debug.Print Erl End Sub
Это потому, что нет номеров строк. Большинство людей не
понимают этого, но VBA позволяет вам иметь номера строк.
Если мы изменим подпрограмму, указав номер строки, она теперь выведет 20.
Sub IspErr() 10 On Error Goto eh Dim val As Long 20 val = "aa" Done: 30 Exit Sub eh: 40 Debug.Print Erl End Sub
Добавление номеров строк в код вручную затруднительно.
Однако есть инструменты, которые позволят вам легко добавлять и удалять номера
строк в подпрограмме.
Когда вы закончите работу над проектом и передадите его
пользователю, в этот момент может быть полезно добавить номера строк. Если вы
используете стратегию обработки ошибок в последнем разделе этого поста, то VBA
сообщит строку, где произошла ошибка.
Использование Err.Raise
Err.Raise позволяет нам создавать ошибки. Мы можем
использовать его для создания пользовательских ошибок для нашего приложения,
что очень полезно. Это эквивалент оператора Throw в Java C #.
Формат следующий
Err.Raise [error number], [error source], [error description]
Давайте посмотрим на простой пример. Представьте, что мы
хотим убедиться, что в ячейке есть запись длиной 5 символов. Мы могли бы иметь конкретное сообщение для
этого
Public Const ERROR_INVALID_DATA As Long = vbObjectError + 513 Sub ReadWorksheet() On Error Goto eh If Len(Sheet1.Range("A1")) <> 5 Then Err.Raise ERROR_INVALID_DATA, "ReadWorksheet" _ , "Значение в ячейке A1 должно иметь ровно 5 символов." End If ' продолжить, если ячейка имеет действительные данные Dim id As String id = Sheet1.Range("A1") Done: Exit Sub eh: ' Err.Raise отправит код сюда MsgBox " Обнаружена ошибка: " & Err.Description End Sub
Когда мы создаем ошибку, используя Err.Raise, нам нужно присвоить ей номер. Мы можем использовать любое
число от 513 до 65535 для нашей ошибки. Мы должны использовать vbObjectError с номером,
например
Err.Raise vbObjectError + 513
Использование Err.Clear
Err.Clear используется для очистки текста и чисел из объекта
Err.Object. Другими словами, он очищает описание и номер.
Редко вам понадобится его использовать, но давайте
рассмотрим пример, где вы могли бы.
В приведенном ниже коде мы подсчитываем количество ошибок,
которые могут возникнуть. Для простоты мы генерируем ошибку для каждого
нечетного числа.
Мы проверяем номер ошибки каждый раз, когда проходим цикл.
Если число не равно нулю, то произошла ошибка. Как только мы посчитаем ошибку,
нам нужно установить номер ошибки на ноль, чтобы он был готов проверить
следующую ошибку.
Sub IspErrClear() Dim count As Long, i As Long ' Продолжите, если ошибка, так как мы проверим номер ошибки On Error Resume Next For i = 0 To 9 ' генерировать ошибку для каждого второго If i Mod 2 = 0 Then Error (13) ' Проверьте на ошибку If Err.Number <> 0 Then count = count + 1 Err.Clear ' Очистить Err, как только он считается End If Next Debug.Print " Количество ошибок было: " & count End Sub
Примечание: Err.Clear сбрасывает текст и цифры в объекте ошибки, но не очищает ошибку — см. On Error Goto -1 для получения дополнительной информации об очистке фактической ошибки.
Логирование
Ведение журнала означает запись информации из вашего
приложения, когда оно запущено. При возникновении ошибки вы можете записать
детали в текстовый файл, чтобы у вас была запись об ошибке.
Код ниже показывает очень простую процедуру регистрации
Sub Logger(sType As String, sSource As String, sDetails As String) Dim sFilename As String sFilename = "C:templogging.txt" ' Архивный файл определенного размера If FileLen(sFilename) > 20000 Then FileCopy sFilename _ , Replace(sFilename, ".txt", Format(Now, "ddmmyyyy hhmmss.txt")) Kill sFilename End If ' Откройте файл для записи Dim filenumber As Variant filenumber = FreeFile Open sFilename For Append As #filenumber Print #filenumber, CStr(Now) & "," & sType & "," & sSource _ & "," & sDetails & "," & Application.UserName Close #filenumber End Sub
Вы можете использовать это так:
' Создать уникальный номер ошибки Public Const ERROR_DATA_MISSING As Long = vbObjectError + 514 Sub CreateReport() On Error Goto eh If Sheet1.Range("A1") = "" Then Err.Raise ERROR_DATA_MISSING, "CreateReport", "Данные отсутствуют в ячейке A1" End If ' другой код здесь Done: Exit Sub eh: Logger "Error", Err.Source, Err.Description End Sub
Журнал не только для записи ошибок. Вы можете записывать
другую информацию во время работы приложения. При возникновении ошибки вы
можете проверить последовательность событий до того, как произошла ошибка.
Ниже приведен пример регистрации. То, как вы реализуете
журналирование, зависит от характера приложения и его полезности.
Sub ReadingData() Logger "Information", "ReadingData()", "Starting to read data." Dim coll As New Collection ' Read data Set coll = ReadData If coll.Count < 10 Then Logger "Warning", "ReadingData()", "Number of data items is low." End If Logger "Information", "ReadingData()", "Number of data items is " & coll.Count Logger "Information", "ReadingData()", "Finished reading data." End Sub
Наличие большого количества информации при работе с ошибкой
может быть очень полезным. Часто пользователь может не дать вам точную информацию
об ошибке, которая произошла. Глядя на журнал, вы можете получить более точную
информацию об информации.
Другие элементы, связанные с ошибками
В этом разделе рассматриваются некоторые другие инструменты
обработки ошибок, которые есть в VBA. Эти элементы считаются устаревшими, но я
включил их, поскольку они могут существовать в устаревшем коде.
Функция ошибки
Функция Error используется для печати описания ошибки с
заданным номером ошибки. Он включен в VBA для обеспечения обратной
совместимости и не нужен, поскольку вместо него можно использовать описание
Err.Description.
Ниже приведены некоторые примеры
' Распечатать текст «Деление на ноль» Debug.Print Error(11) ' Распечатать текст "Несоответствие типов" Debug.Print Error(13) ' Распечатать текст "Файл не найден" Debug.Print Error(53)
Заявление об ошибке
Заявление об ошибке позволяет имитировать ошибку. Он включен
в VBA для обратной совместимости. Вместо этого вы должны использовать
Err.Raise.
В следующем коде мы моделируем ошибку «Разделить на ноль».
Sub ZayavlObOshibke() On Error Goto eh ' Это создаст деление на ноль ошибок Error 11 Exit Sub eh: Debug.Print Err.Number, Err.Description End Sub
Это утверждение включено в VBA для обратной совместимости.
Вместо этого вы должны использовать Err.Raise.
Простая стратегия обработки ошибок
Со всеми различными опциями вы можете быть озадачены тем,
как использовать обработку ошибок в VBA. В этом разделе я покажу вам, как
реализовать простую стратегию обработки ошибок, которую вы можете использовать
во всех своих приложениях.
Основная реализация
Это простой обзор нашей стратегии
- Поместите строку On Error Goto Label в начале нашего верхнего Sub.
- Поместите Label у обработки ошибок в конце нашего верхнего
Sub. - Если происходит ожидаемая ошибка, обработайте ее и продолжайте.
- Если приложение не может продолжить работу, используйте Err.Raise для перехода к метке обработки ошибок.
- В случае непредвиденной ошибки код автоматически перейдет к метке обработки ошибок.
На следующем рисунке показан обзор того, как это выглядит
Следующий код показывает простую реализацию этой стратегии
Public Const ERROR_NO_ACCOUNTS As Long = vbObjectError + 514 Sub BuildReport() On Error Goto eh ' Если ошибка в ReadAccounts, то перейти к ошибке ReadAccounts ' Сделай что-нибудь с кодом Done: Exit Sub eh: ' Все ошибки будут прыгать сюда MsgBox Err.Source & ": Произошла следующая ошибка " & Err.Description End Sub Sub ReadAccounts() ' ОЖИДАЕМАЯ ОШИБКА - Может обрабатываться кодом ' Приложение может обрабатывать A1 равным нулю If Sheet1.Range("A1") = 0 Then Sheet1.Range("A1") = 1 End If ' ОЖИДАЕМАЯ ОШИБКА - не может быть обработана кодом ' Приложение не может быть продолжено, если нет учетной записи If Dir("C:ДокументыОтчет.xlsx") = "" Then Err.Raise ERROR_NO_ACCOUNTS, "UsingErr" _ , "There are no accounts present for this month." End If ' НЕОЖИДАННАЯ ОШИБКА - не может быть обработана кодом ' Если ячейка B3 содержит текст, мы получим ошибку несоответствия типов Dim total As Long total = Sheet1.Range("B3") ' продолжить и читать счета End Sub
Это хороший способ реализации обработки ошибок, потому что
- Нам не нужно добавлять код обработки ошибок в
каждую подпрограмму. - Если возникает ошибка, то VBA корректно
завершает работу приложения.
Полная стратегия обработки ошибок
Стратегия выше имеет один недостаток. Он не сообщает вам,
где произошла ошибка. VBA не наполняет Err.Source чем-либо полезным, поэтому мы
должны сделать это сами.
В этом разделе я собираюсь представить более полную
стратегию ошибок. Я написал два сабвуфера, которые выполняют всю тяжелую
работу, поэтому все, что вам нужно сделать, это добавить их в свой проект.
Целью этой стратегии является предоставление вам стека * и
номера строки в случае возникновения ошибки.
* Стек — это список вспомогательных функций, которые
использовались в данный момент при возникновении ошибки.
Это наша стратегия
- Разместите обработку ошибок во всех
подпрограммах. - Когда происходит ошибка, обработчик ошибок
добавляет подробности к ошибке и вызывает ее снова. - Когда ошибка достигает самой верхней
подпрограммы, она отображается.
Мы просто «всплываем» из-за ошибки. Следующая диаграмма
показывает простое визуальное представление о том, что происходит, когда в Sub3
возникает ошибка
Единственная грязная часть этого — правильное форматирование
строк. Я написал две подводные лодки, которые справляются с этим, поэтому он
позаботится о вас.
Это две вспомогательные подводные лодки
Option Explicit Public Const MARKER As String = "NOT_TOPMOST" ' Вызывает ошибку и добавляет номер строки и имя текущей процедуры Sub RaiseError(ByVal errorno As Long, ByVal src As String _ , ByVal proc As String, ByVal desc As String, ByVal lineno As Long) Dim sLineNo As Long, sSource As String ' Если маркера нет, тогда RaiseError вызывается впервые. If Left(src, Len(MARKER)) <> MARKER Then ' Добавить номер строки ошибки, если она есть If lineno <> 0 Then sSource = vbCrLf & "Line no: " & lineno & " " End If ' Добавить маркер и процедуру к источнику sSource = MARKER & sSource & vbCrLf & proc Else ' Если ошибка уже возникла, просто добавьте имя процедуры sSource = src & vbCrLf & proc End If ' Если код останавливается здесь, убедитесь, что DisplayError находится в верхней части Sub Err.Raise errorno, sSource, desc End Sub ' Отображает ошибку, когда она достигает самого верхнего sub ' Примечание: вы можете добавить вызов для входа из этого подпункта Sub DisplayError(ByVal src As String, ByVal desc As String _ , ByVal sProcname As String) ' Удалить маркер src = Replace(src, MARKER, "") Dim sMsg As String sMsg = " Произошла следующая ошибка: " & vbCrLf & Err.Description _ & vbCrLf & vbCrLf & " Расположение ошибки: " sMsg = sMsg + src & vbCrLf & sProcname ' Показать сообщение MsgBox sMsg, Title:="Ошибка " End Sub
Пример использования этой стратегии
Вот простое кодирование, которое использует эти Sub. В этой стратегии мы не размещаем какой-либо код в верхнем подпрограмме. Мы только вызываем подводные лодки.
Sub Topmost() On Error Goto EH Level1 Done: Exit Sub EH: DisplayError Err.source, Err.Description, "Module1.Topmost" End Sub Sub Level1() On Error Goto EH Level2 Done: Exit Sub EH: RaiseError Err.Number, Err.source, "Module1.Level1", Err.Description, Erl End Sub Sub Level2() On Error Goto EH ' Ошибка здесь Dim a As Long a = "7 / 0" Done: Exit Sub EH: RaiseError Err.Number, Err.source, "Module1.Level2", Err.Description, Erl End Sub
Результат выглядит так
Если в вашем проекте есть номера строк, результат будет содержать номер строки ошибки.
Примечание: вы можете получить следующую ошибку при использовании этого кода:
“Programmatic Access to Visual Basic Project is not trusted”
Чтобы решить эту проблему, выполните следующие действия.
- Перейдите в раздел «Разработчик» на ленте и
нажмите «Macro Security», которая находится под кодом. - Нажмите «Настройка макроса» в левом списке.
- Поставьте флажок в поле «Доверительный доступ к
объектной модели проекта VBA». - Нажмите Ok.
Обработка ошибок в двух словах
- Обработка ошибок используется для обработки ошибок, возникающих во время работы приложения.
- Вы пишете определенный код для обработки ожидаемых ошибок. Вы используете оператор обработки ошибок VBA
On Error Goto [label] для отправки VBA на метку при возникновении непредвиденной ошибки. - Вы можете получить подробную информацию об ошибке из Err.Description.
- Вы можете создать свою собственную ошибку, используя Err.Raise.
- Использование одного оператора On Error в самой верхней подпрограмме перехватит все ошибки в подпрограммах, которые вызываются отсюда.
- Если вы хотите записать имя Sub с ошибкой, вы можете обновить ошибку и сбросить ее.
- Вы можете использовать журнал для записи информации о приложении, когда оно запущено.