Внесение даже небольшого изменения на рабочем листе Excel может привести к образованию ошибок в других ячейках. К примеру, вы можете случайно ввести значение в ячейку, которая раньше содержала формулу. Эта простая ошибка может оказать значительное влияние на другие формулы, и вы не сможете обнаружить ее, пока не сделаете какие-нибудь изменения на листе.
Ошибки в формулах делятся на несколько категорий:
Синтаксические ошибки: Возникают при неправильном синтаксисе формулы. Например, формула имеет несоответствующие скобки, или функция имеет не корректное количество аргументов.
Логические ошибки: В этом случает формула не возвращает ошибку, но имеет логический изъян, что является причиной неправильного результата расчета.
Ошибки неправильных ссылок: Логика формул верна, но формула использует некорректную ссылку на ячейку. Простой пример, диапазон данных для суммирования в формуле СУММ может содержать не все элементы, которые вы хотите суммировать.
Семантические ошибки: Например, название функции написано неправильно, в этом случае Excel вернет ошибку #ИМЯ?
Циклические ошибки: Циклические ссылки возникают, когда формула ссылается на саму себя, прямо или косвенно. Циклические ссылки иногда могут быть полезны, но зачастую они указываю на наличие проблемы.
Ошибки в формулах массивов: Когда вы вводите формулу массива, по окончании ввода необходимо нажать Ctrl + Sift + Enter. Если вы не сделали этого, Excel не поймет, что это формула массива, и вернет ошибку или некорректный результат.
Ошибки неполных расчётов: В этом случае формулы рассчитываются не полностью. Чтобы удостовериться, что се формулы пересчитаны, наберите Ctrl + Alt + Shift + F9.
Проще всего найти и скорректировать синтаксические ошибки. Чаще всего, вы знаете, когда формула содержит синтаксическую ошибку. К примеру, Excel не даст ввести формулу с несогласованными скобками. Иные ситуации синтаксических ошибок приводят к выводу следующих ошибок в ячейке листа.
Ошибка #ДЕЛ/0!
Если вы создали формулу, в которой производится деление на ноль, Excel вернет ошибку #ДЕЛ/0!
Так как Excel воспринимает пустую ячейку как ноль, то при делении на пустую ячейку тоже будет возвращена ошибка. Эта проблема часто встречается при создании формулы для данных, которые еще не были введены. Формула ячейки D4 была протянута на весь диапазон (=C4/B4).
Эта формула возвращает отношение значений колонок C к B. Так как не все данные по дням были занесены, формула вернула ошибку #ДЕЛ/0!
Чтобы избежать ошибки, вы можете воспользоваться формулой ЕСЛИ, для проверки, являются ли ячейки колонки B пустыми или нет:
=ЕСЛИ(B4=0;»»;C4/B4)
Эта формула вернет пустое значение, если ячейка B4 будет пустой или содержать 0, в противном случае вы увидите посчитанное значение.
Другим подходом является использование функции ЕСЛИОШИБКА, которая проверяет на наличие ошибки. Следующая формула вернет пустую строку, если выражение C4/B4 будет возвращать ошибку:
=ЕСЛИОШИБКА(C4/B4;»»)
Ошибка #Н/Д
Ошибка #Н/Д возникает в случаях, когда ячейка, на которую ссылается формула, содержит #Н/Д.
Обычно, ошибка #Н/Д возвращается в результате работы формул подстановки (ВПР, ГПР, ПОИСКПОЗ и ИНДЕКС). В случае, когда совпадение не было найдено.
Чтобы перехватить ошибку и отобразить пустую ячейку, воспользуйтесь функцией =ЕСНД().
=ЕСНД(ВПР(A1;B1:D30;3;0);»»)
Обратите внимание, что функция ЕСНД является новой функцией в Excel 2013. Для совместимости с предыдущими версиями воспользуйтесь аналогом этой функции:
=ЕСЛИ(ЕНД(ВПР(A1;B1:D30;3;0));»»;ВПР(A1;B1:D30;3;0))
Ошибка #ИМЯ?
Excel может вернуть ошибку #ИМЯ? в следующих случаях:
- Формула содержит неопределенный именованный диапазон
- Формула содержит текст, который Excel интерпретирует как неопределенный именованный диапазон. Например, неправильно написанное имя функции вернет ошибку #ИМЯ?
- Формула содержит текст не заключенный в кавычки
- Формула содержит ссылку на диапазон, у которого отсутствует двоеточие между адресами ячеек
- Формула использует функцию рабочего листа, которая была определена надстройкой, но надстройка не была установлена
Ошибка #ПУСТО!
Ошибка #ПУСТО! возникает в случае, когда формула пытается использовать пересечение двух диапазонов, которые фактически не пресекаются. Оператором пересечения в Excel является пробел. Следующая формула вернет #ПУСТО!, так как диапазоны не пересекаются.
Ошибка #ЧИСЛО!
Ошибка #ЧИСЛО! будет возвращена в следующих случаях:
- В числовом аргументе формулы введено нечисловое значение (например, $1,000 вместо 1000)
- В формуле введен недопустимый аргумент (например, =КОРЕНЬ(-12))
- Функция, использующая итерацию, не может рассчитать результат. Примеры функций, использующих итерацию: ВСД(), СТАВКА()
- Формула возвращает значение, которое слишком большое или слишком маленькое. Excel поддерживает значения между -1E-307 и 1E-307.
Ошибка #ССЫЛКА!
Ошибка #ССЫЛКА! возникает в случаях, когда формула использует недействительную ссылку на ячейку. Ошибка возникает в следующих ситуациях:
- Вы удалили колонку или строку, на которую ссылалась ячейка формулы. Например, следующая формула вернёт ошибку, если первая строка или столбцы A или B были удалены:
=A1/B1
- Вы удалили рабочий лист, на которую ссылалась ячейка формулы. Например, следующая формула вернёт ошибку, если Лист1 был удален:
=Лист1!A1
- Вы скопировали формулу в расположение, где относительная ссылка становится недействительной. Например, при копировании формулы из ячейки A2 в ячейку A1, формула вернет ошибку #ССЫЛКА!, так как она пытается обратиться к несуществующей ячейке.
=A1-1
- Вы вырезаете ячейку и затем вставляете ее в ячейку, на которую ссылается формула. В этом случае будет возвращена ошибка #ССЫЛКА!
Ошибка #ЗНАЧ!
Ошибка #ЗНАЧ! является самой распространенной ошибкой и возникает в следующих ситуациях:
- Аргумент функции имеет неверный тип данных или формула пытается выполнить операцию, используя неверные данные. Например, при попытке сложения числового значения с текстовым, формула вернет ошибку
- Аргумент функции является диапазоном, когда он должен быть одним значением
- Пользовательские функции листа не рассчитываются. Для принудительного пересчета нажмите Ctrl + Alt + F9
- Пользовательская функция листа пытается выполнить операцию, которая не является допустимой. Например, пользовательская функция не может изменить среду Excel или сделать изменения в других ячейках
- Вы забыли нажать Ctrl + Shift + Enter при вводе формулы массива
Содержание
- Синтаксическая ошибка
- Поддержка и обратная связь
- Syntax error
- Support and feedback
- Syntax Error VBA
- Warning Messages for Syntax Errors
- Common Syntax Errors
- VBA Coding Made Easy
- VBA Code Examples Add-in
- VBA On Error – Error Handling Best Practices
- VBA Errors Cheat Sheet
- Errors
- VBA Error Handling
- VBA On Error Statement
- On Error GoTo 0
- On Error Resume Next
- VBA Coding Made Easy
- Err.Number, Err.Clear, and Catching Errors
- Error Handling with Err.Number
- On Error GoTo Line
- On Error Exit Sub
- Err.Clear, On Error GoTo -1, and Resetting Err.Number
- VBA On Error MsgBox
- VBA IsError
- If Error VBA
- VBA Error Types
- Runtime Errors
- Syntax Errors
- Compile Errors
- Debug > Compile
- OverFlow Error
- Other VBA Error Terms
- VBA Catch Error
- VBA Ignore Error
- VBA Throw Error / Err.Raise
- VBA Error Trapping
- VBA Error Message
- VBA Error Handling in a Loop
- VBA Error Handling in Access
- VBA Code Examples Add-in
Синтаксическая ошибка
Visual Basic не может определить действие, которое требуется выполнить. Эта ошибка имеет следующие причину и решение:
Написание ключевых слов и именованных аргументов должно в точности совпадать с определенным в спецификации синтаксиса. Уточните правильное написание в интерактивной справке и при необходимости исправьте его.
Неверное сочетание знаков препинания. Например, если вы опускаете необязательный позиционно расположенный аргумент, необходимо заменить запятую (,), которая выступает как заполнитель для аргумента.
Проверьте правильность написания имени процедуры.
Попытка одновременно указать аргументы Optional и ParamArray в объявлении процедуры. Аргумент ParamArray не может иметь тип Optional. Удалите один из этих аргументов.
Попытка определить процедуру события с параметром Optional или ParamArray. Удалите ключевое слово Optional или ParamArray из спецификации параметра.
Попытка использовать именованный аргумент в операторе RaiseEvent. События не поддерживают названные аргументы.
Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh).
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Источник
Syntax error
Visual Basic can’t determine what action to take. This error has the following causes and solutions:
A keyword or argument is misspelled.
Keywords and the names of named arguments must exactly match those specified in their syntax specifications. Check online Help, and then correct the spelling.
Punctuation is incorrect. For example, when you omit optional arguments positionally, you must substitute a comma (,) as a placeholder for the omitted argument.
A procedure isn’t defined.
Check the spelling of the procedure name.
You tried to specify both Optional and ParamArray in the same procedure declaration. A ParamArray argument can’t be Optional. Choose one and delete the other.
You tried to define an event procedure with an Optional or ParamArray parameter. Remove the Optional or ParamArray keyword from the parameter specification.
You tried to use a named argument in a RaiseEvent statement. Events don’t support named arguments.
For additional information, select the item in question and press F1 (in Windows) or HELP (on the Macintosh).
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Syntax Error VBA
This tutorial will explain what a VBA Syntax Error means and how it occurs.
VBA code has to be constructed in a certain way in order to run. A syntax error occurs in VBA when the code is not constructed correctly. These errors are shown in the VBE Editor in red which makes them easy to identify.
(See our Error Handling Guide for more information about VBA Errors)
Warning Messages for Syntax Errors
If you have the option for Syntax Check switch on in your VBE, then a message box will appear when you make a syntax error.
If a message box does not appear, the incorrect code will still show up in red as in the graphic above but a warning message will not be displayed. It is up to you whether or not you want these warning message to appear as you can switch this option
To switch on this option, in the Menu, select Tools > Options. In the Editor Tab, make sure that the option Auto Syntax Check is ticked.
Common Syntax Errors
Syntax errors occur due to misspelling or missing code – like the omission of a Then when we are writing the first line of an If statement.
Some other common error are listed below.
For without a To :
Do Until without specifying the condition:
With without specifying what is included in the with:
Not Closing Brackets or Leaving out Punctuation:
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
VBA On Error – Error Handling Best Practices
In this Article
VBA Errors Cheat Sheet
Errors
VBA Error Handling
VBA Error Handling refers to the process of anticipating, detecting, and resolving VBA Runtime Errors. The VBA Error Handling process occurs when writing code, before any errors actually occur.
VBA Runtime Errors are errors that occur during code execution. Examples of runtime errors include:
- Referencing a non-existent workbook, worksheet, or other object (Run-time Error 1004)
- Invalid data ex. referencing an Excel cell containing an error (Type Mismatch – Run-time Error 13)
- Attempting to divide by zero
VBA On Error Statement
Most VBA error handling is done with the On Error Statement. The On Error statement tells VBA what to do if it encounters an error. There are three On Error Statements:
- On Error GoTo 0
- On Error Resume Next
- On Error GoTo Line
On Error GoTo 0
On Error GoTo 0 is VBA’s default setting. You can restore this default setting by adding the following line of code:
When an error occurs with On Error GoTo 0, VBA will stop executing code and display its standard error message box.
Often you will add an On Error GoTo 0 after adding On Error Resume Next error handling (next section):
On Error Resume Next
On Error Resume Next tells VBA to skip any lines of code containing errors and proceed to the next line.
Note: On Error Resume Next does not fix an error, or otherwise resolve it. It simply tells VBA to proceed as if the line of code containing the error did not exist. Improper use of On Error Resume Next can result in unintended consequences.
A great time to use On Error Resume Next is when working with objects that may or may not exist. For example, you want to write some code that will delete a shape, but if you run the code when the shape is already deleted, VBA will throw an error. Instead you can use On Error Resume Next to tell VBA to delete the shape if it exists.
Notice we added On Error GoTo 0 after the line of code containing the potential error. This resets the error handling.
In the next section we’ll show you how to test if an error occurred using Err.Number, giving you more advanced error handling options.
VBA Coding Made Easy
Stop searching for VBA code online. Learn more about AutoMacro — A VBA Code Builder that allows beginners to code procedures from scratch with minimal coding knowledge and with many time-saving features for all users!
Err.Number, Err.Clear, and Catching Errors
Instead of simply skipping over a line containing an error, we can catch the error by using On Error Resume Next and Err.Number.
Err.Number returns an error number corresponding with the type of error detected. If there is no error, Err.Number = 0.
For example, this procedure will return “11” because the error that occurs is Run-time error ’11’.
Error Handling with Err.Number
The true power of Err.Number lies in the ability to detect if an error occurred (Err.Number <> 0). In the example below, we’ve created a function that will test if a sheet exists by using Err.Number.
Note: We’ve added a On Error GoTo -1 to the end which resets Err.Number to 0 (see two sections down).
With On Error Resume Next and Err.Number, you can replicate the “Try” & “Catch” functionality of other programming languages.
On Error GoTo Line
On Error GoTo Line tells VBA to “go to” a labeled line of code when an error is encountered. You declare the Go To statement like this (where errHandler is the line label to go to):
and create a line label like this:
Note: This is the same label that you’d use with a regular VBA GoTo Statement.
Below we will demonstrate using On Error GoTo Line to Exit a procedure.
On Error Exit Sub
You can do this by placing the error handler line label at the end of your procedure:
Err.Clear, On Error GoTo -1, and Resetting Err.Number
After an error is handled, you should generally clear the error to prevent future issues with error handling.
After an error occurs, both Err.Clear and On Error GoTo -1 can be used to reset Err.Number to 0. But there is one very important difference: Err.Clear does not reset the actual error itself, it only resets the Err.Number.
What does that mean? Using Err.Clear, you will not be able to change the error handling setting. To see the difference, test out this code and replace On Error GoTo -1 with Err.Clear:
Typically, I recommend always using On Error GoTo -1, unless you have a good reason to use Err.Clear instead.
VBA On Error MsgBox
You might also want to display a Message Box on error. This example will display different message boxes depending on where the error occurs:
Here you would replace Err.Raise(11) with your actual code.
VBA IsError
Another way to handle errors is to test for them with the VBA ISERROR Function. The ISERROR Function tests an expression for errors, returning TRUE or FALSE if an error occurs.
If Error VBA
You can also handle errors in VBA with the Excel IFERROR Function. The IFERROR Function must be accessed by using the WorksheetFunction Class:
This will output the value of Range A10, if the value is an error, it will output 0 instead.
VBA Error Types
Runtime Errors
As stated above:
VBA Runtime Errors are errors that occur during code execution. Examples of runtime errors include:
- Referencing a non-existent workbook, worksheet, or other object
- Invalid data ex. referencing an Excel cell containing an error
- Attempting to divide by zero
You can “error handle” runtime errors using the methods discussed above.
Syntax Errors
VBA Syntax Errors are errors with code writing. Examples of syntax errors include:
- Mispelling
- Missing or incorrect punctuation
The VBA Editor identifies many syntax errors with red highlighting:
The VBA Editor also has an option to “Auto Syntax Check”:
When this is checked, the VBA Editor will generate a message box alerting you syntax errors after you enter a line of code:
I personally find this extremely annoying and disable the feature.
Compile Errors
Before attempting to run a procedure, VBA will “compile” the procedure. Compiling transforms the program from source code (that you can see) into executable form (you can’t see).
VBA Compile Errors are errors that prevent the code from compiling.
A good example of a compile error is a missing variable declaration:
Other examples include:
- For without Next
- Select without End Select
- If without End If
- Calling a procedure that does not exist
Syntax Errors (previous section) are a subset of Compile Errors.
Debug > Compile
Compile errors will appear when you attempt to run a Procedure. But ideally, you would identify compile errors prior to attempting to run the procedure.
You can do this by compiling the project ahead of time. To do so, go to Debug > Compile VBA Project.
The compiler will “go to” the first error. Once you fix that error, compile the project again. Repeat until all errors are fixed.
You can tell that all errors are fixed because Compile VBA Project will be grayed out:
OverFlow Error
The VBA OverFlow Error occurs when you attempt to put a value into a variable that is too large. For example, Integer Variables can only contain values between -32,768 to 32,768. If you enter a larger value, you’ll receive an Overflow error:
Instead, you should use the Long Variable to store the larger number.
Other VBA Error Terms
VBA Catch Error
Unlike other programming languages, In VBA there is no Catch Statement. However, you can replicate a Catch Statement by using On Error Resume Next and If Err.Number <> 0 Then. This is covered above in Error Handling with Err.Number.
VBA Ignore Error
To ignore errors in VBA, simply use the On Error Resume Next statement:
However, as mentioned above, you should be careful using this statement as it doesn’t fix an error, it just simply ignores the line of code containing the error.
VBA Throw Error / Err.Raise
To through an error in VBA, you use the Err.Raise method.
This line of code will raise Run-time error ’13’: Type mismatch:
VBA Error Trapping
VBA Error Trapping is just another term for VBA Error Handling.
VBA Error Message
A VBA Error Message looks like this:
When you click ‘Debug’, you’ll see the line of code that is throwing the error:
VBA Error Handling in a Loop
The best way to error handle within a Loop is by using On Error Resume Next along with Err.Number to detect if an error has occurred (Remember to use Err.Clear to clear the error after each occurrence).
The example below will divide two numbers (Column A by Column B) and output the result into Column C. If there’s an error, the result will be 0.
VBA Error Handling in Access
All of the above examples work exactly the same in Access VBA as in Excel VBA.
VBA Code Examples Add-in
Easily access all of the code examples found on our site.
Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.
Источник
Ошибки в Excel возникают довольно часто. Вы, наверняка, замечали странные значения в ячейках, вместо ожидаемого результата, которые начинались со знака #. Это говорит о том, что формула возвращает ошибку. Чтобы избавиться от ошибки, Вы должны исправить ее причину, а они могут быть самыми разными.
Содержание
- Несоответствие открывающих и закрывающих скобок
- Ячейка заполнена знаками решетки
- Ошибка #ДЕЛ/0!
- Ошибка #Н/Д
- Ошибка #ИМЯ?
- Ошибка #ПУСТО!
- Ошибка #ЧИСЛО!
- Ошибка #ССЫЛКА!
- Ошибка #ЗНАЧ!
Несоответствие открывающих и закрывающих скобок
Самым распространенным примером возникновения ошибок в формулах Excel является несоответствие открывающих и закрывающих скобок. Когда пользователь вводит формулу, Excel автоматически проверяет ее синтаксис и не даст закончить ввод, пока в ней присутствует синтаксическая ошибка.
Например, на рисунке выше мы намеренно пропустили закрывающую скобку при вводе формулы. Если нажать клавишу Enter, Excel выдаст следующее предупреждение:
В некоторых случаях Excel предлагает свой вариант исправления ошибки. Вы можете либо согласиться с Excel, либо исправить формулу самостоятельно. В любом случае слепо полагаться на это исправление ни в коем случае нельзя. Например, на следующем рисунке Excel предложил нам неправильное решение.
Ячейка заполнена знаками решетки
Бывают случаи, когда ячейка в Excel полностью заполнена знаками решетки. Это означает один из двух вариантов:
-
- Столбец недостаточно широк для отображения всего содержимого ячейки. Для решения проблемы достаточно увеличить ширину столбца, чтобы все данные отобразились…
…или изменить числовой формат ячейки.
- Столбец недостаточно широк для отображения всего содержимого ячейки. Для решения проблемы достаточно увеличить ширину столбца, чтобы все данные отобразились…
- В ячейке содержится формула, которая возвращает некорректное значение даты или времени. Думаю, Вы знаете, что Excel не поддерживает даты до 1900 года. Поэтому, если результатом формулы оказывается такая дата, то Excel возвращает подобный результат.
В данном случае увеличение ширины столбца уже не поможет.
Ошибка #ДЕЛ/0!
Ошибка #ДЕЛ/0! возникает, когда в Excel происходит деление на ноль. Это может быть, как явное деление на ноль, так и деление на ячейку, которая содержит ноль или пуста.
Ошибка #Н/Д
Ошибка #Н/Д возникает, когда для формулы или функции недоступно какое-то значение. Приведем несколько случаев возникновения ошибки #Н/Д:
- Функция поиска не находит соответствия. К примеру, функция ВПР при точном поиске вернет ошибку #Н/Д, если соответствий не найдено.
- Формула прямо или косвенно обращается к ячейке, в которой отображается значение #Н/Д.
- При работе с массивами в Excel, когда аргументы массива имеют меньший размер, чем результирующий массив. В этом случае в незадействованных ячейках итогового массива отобразятся значения #Н/Д.Например, на рисунке ниже видно, что результирующий массив C4:C11 больше, чем аргументы массива A4:A8 и B4:B8.
Нажав комбинацию клавиш Ctrl+Shift+Enter, получим следующий результат:
Ошибка #ИМЯ?
Ошибка #ИМЯ? возникает, когда в формуле присутствует имя, которое Excel не понимает.
- Например, используется текст не заключенный в двойные кавычки:
- Функция ссылается на имя диапазона, которое не существует или написано с опечаткой:
В данном примере имя диапазон не определено.
- Адрес указан без разделяющего двоеточия:
- В имени функции допущена опечатка:
Ошибка #ПУСТО!
Ошибка #ПУСТО! возникает, когда задано пересечение двух диапазонов, не имеющих общих точек.
- Например, =А1:А10 C5:E5 – это формула, использующая оператор пересечения, которая должна вернуть значение ячейки, находящейся на пересечении двух диапазонов. Поскольку диапазоны не имеют точек пересечения, формула вернет #ПУСТО!.
- Также данная ошибка возникнет, если случайно опустить один из операторов в формуле. К примеру, формулу =А1*А2*А3 записать как =А1*А2 A3.
Ошибка #ЧИСЛО!
Ошибка #ЧИСЛО! возникает, когда проблема в формуле связана со значением.
- Например, задано отрицательное значение там, где должно быть положительное. Яркий пример – квадратный корень из отрицательного числа.
- К тому же, ошибка #ЧИСЛО! возникает, когда возвращается слишком большое или слишком малое значение. Например, формула =1000^1000 вернет как раз эту ошибку.
Не забывайте, что Excel поддерживает числовые величины от -1Е-307 до 1Е+307.
- Еще одним случаем возникновения ошибки #ЧИСЛО! является употребление функции, которая при вычислении использует метод итераций и не может вычислить результат. Ярким примером таких функций в Excel являются СТАВКА и ВСД.
Ошибка #ССЫЛКА!
Ошибка #ССЫЛКА! возникает в Excel, когда формула ссылается на ячейку, которая не существует или удалена.
- Например, на рисунке ниже представлена формула, которая суммирует значения двух ячеек.
Если удалить столбец B, формула вернет ошибку #ССЫЛКА!.
- Еще пример. Формула в ячейке B2 ссылается на ячейку B1, т.е. на ячейку, расположенную выше на 1 строку.
Если мы скопируем данную формулу в любую ячейку 1-й строки (например, ячейку D1), формула вернет ошибку #ССЫЛКА!, т.к. в ней будет присутствовать ссылка на несуществующую ячейку.
Ошибка #ЗНАЧ!
Ошибка #ЗНАЧ! одна из самых распространенных ошибок, встречающихся в Excel. Она возникает, когда значение одного из аргументов формулы или функции содержит недопустимые значения. Самые распространенные случаи возникновения ошибки #ЗНАЧ!:
- Формула пытается применить стандартные математические операторы к тексту.
- В качестве аргументов функции используются данные несоответствующего типа. К примеру, номер столбца в функции ВПР задан числом меньше 1.
- Аргумент функции должен иметь единственное значение, а вместо этого ему присваивают целый диапазон. На рисунке ниже в качестве искомого значения функции ВПР используется диапазон A6:A8.
Вот и все! Мы разобрали типичные ситуации возникновения ошибок в Excel. Зная причину ошибки, гораздо проще исправить ее. Успехов Вам в изучении Excel!
Оцените качество статьи. Нам важно ваше мнение:
Aleator 102 / 87 / 17 Регистрация: 04.05.2011 Сообщений: 1,330 |
||||
1 |
||||
Синтаксическая ошибка в формуле04.09.2018, 08:41. Показов 6088. Ответов 2 Метки нет (Все метки)
Получил синтаксическую ошибку в русском Excel. На английском формула работает.
Помогите исправить. Добавлено через 16 минут
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
04.09.2018, 08:41 |
Ответы с готовыми решениями:
$connection = mysqli_connect(‘127.0.0.1′,’mysql’,’mysql’,’test_db’); if ( $connection… Ошибка TNS-01150: Указан неверный адрес имени прослушивателя NL-00303: синтаксическая ошибка в NV-строке Ошибка анализа: синтаксическая ошибка, неожиданная «ModelBlogArticle» (T_STRING) в /home/u1607/uggitut.ru/www/admin/mode вот выдает ошибку: Parse error: syntax error,… 2 |
2637 / 1694 / 694 Регистрация: 04.09.2015 Сообщений: 3,367 |
|
04.09.2018, 09:05 |
2 |
Возможно из-за запятых в разделителях аргументах.
0 |
2633 / 1333 / 255 Регистрация: 25.10.2010 Сообщений: 2,194 |
|
04.09.2018, 09:13 |
3 |
Поменял на Formula — заработало. Почему? Если Вы пишете .FormulaLocal в русскоязычном Excel, то формула должна выглядеть как «=ЕСЛИ(И(…»
0 |
На чтение 25 мин. Просмотров 14.5k.
Эта статья содержит полное руководство по обработке ошибок 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 с ошибкой, вы можете обновить ошибку и сбросить ее.
- Вы можете использовать журнал для записи информации о приложении, когда оно запущено.
Я ввожу формулу, но вместо результата я вижу текст #Н/Д или #####. Что это значит?
Это означает что в исходных данных, самой формуле, форматировании или в другом случае допущена ошибка. Сообщение об ошибке содержит указание на то, где именно она допущена. Ниже мы рассмотрим сообщения об ошибках и наиболее частые их причины:
Ошибка #####
Чаще всего эта ошибка означает, что столбец недостаточно широк для отображения содержимого ячейки. Для решения проблемы достаточно увеличить ширину столбца.
Другая причина ошибки — в ячейке содержатся дата или время с отрицательными значениями.
Ошибка #Н/Д
Данная ошибка возникает, если функции или формула содержит ссылку на значение (или само значение), которого нет. Другими словами, в функции или формуле не заполнено обязательное поле, или есть ссылка на пустую ячейку в то время, как в ячейке обязательно должно присутствовать значение. Наиболее частые причины:
- В функции не указаны один или несколько обязательных аргументов.
- В функциях ВПР, ГПР, ПРОСМОТР или ПОИСКПОЗ указано неправильное значение аргумента искомое_значение.
- Функции ВПР, ГПР или ПОИСКПОЗ применяются для поиска в несортированной таблице.
- В исходной таблице вместо пропущенных данных было введено значение #Н/Д или НД().
Ошибка #ДЕЛ/0!
Ошибка #ДЕЛ/0! Означает, что в процессе вычисления происходит деление на ноль. Причины могут быть следующие:
- В формуле явно задано деление на ноль (например, =10/0).
- В формуле или функции в качестве делителя стоит ссылка на пустую ячейку или на ячейку, которая содержит ноль.
Ошибка #ПУСТО!
Эта ошибка возникает, когда в условиях функции указано два пересекающихся диапазона, но на самом деле они не пересекаются.
Примечание: В некоторых задачах пользователю необходимо выполнить действия только с теми ячейками, которые одновременно присутствуют в двух диапазонах. Для этого диапазоны ячеек в функции разделяют не точкой с запятой, а пробелом (который называют оператором пересечения).
- Если в функции не должны задаваться пересекающиеся диапазоны (например, при суммировании), вероятно, в качестве разделителя диапазонов был использован пробел, а не точка с запятой. Или пробел был использован при указании диапазона, вместо двоеточия.
- Если в функции должны задаваться пересекающиеся диапазоны, вероятно диапазоны действительно не имеют общих ячеек. Нужно проверить заданные диапазоны в аргументах функции.
Ошибка #ЧИСЛО!
Данная ошибка возникает, если в формуле или функции указаны некорректные числовые значения. Например:
- В функции, которая использует числовой аргумент, в его качестве указан текст или ссылка на ячейку с нечисловым значением.
- Функция, которая выполняет итерации (вычисление, которое повторяется до тех пор, пока не будет выполнено заданное условие, например ВСД или СТАВКА) не может вычислить результат (например, заданное условие не наступило).
- Результатом вычисления стало число, слишком большое или слишком малое для использования в Excel. Напоминаем, что максимальное число в Excel не может превышать 10307 и быть меньше минус 10307.
Подобное сообщение говорит нам о том, что ссылка на ячейку недействительна. Чаще всего это может свидетельствовать о том, что ячейки, на которые ссылается формула, были удалены, или в эти ячейки были скопированы другие значения.
Ошибка #ЗНАЧ!
Такая ошибка возникает при использовании неверного типа аргумента или операнда. Например, пользователь может ошибиться в следующем:
- В формулу вместо числа или логического значения (ИСТИНА или ЛОЖЬ) введен текст.
- После ввода или редактирования формулы массива нажимается клавиша ВВОД вместо комбинации CTRL+SHIFT+ВВОД.
- Ссылка, формула или функция указана как массив.
- В качестве условия функции, который требует единичное значение, указан диапазон.
Я понял, что означает ошибка. Но моя формула очень большая/работает с большим объемом данных. Как мне найти место, где допущена ошибка?
Excel 2007 может сразу указать на ошибку или поможет просмотреть вычисления поэтапно, чтобы найти ошибку.
Для этого нажмите на пиктограмму, которая появилась возле ячейки с сообщением об ошибке. Если формула состоит только из одной функции или причина ошибки достаточно простая, контекстное меню будет содержать пункт Источник ошибки. После нажатия на этот пункт Excel покажет Вам ячейку с некорректными данными автоматически:
Если же формула содержит несколько функций, тогда в контекстном меню появится пункт Показать этапы вычисления. В открывшемся окне Вы сможете увидеть, какое именно вычисление приводит к ошибке.
У меня ошибка #ИМЯ? и я не могу найти её причину.
- Проверьте правильность написания имени (названия) функции. Для этого можно вызвать Мастер функций (группа Библиотека функций вкладки Формулы), и выбрать нужную функцию из предлагаемого списка.
- В формулу был введен текст, не заключенный в двойные кавычки. Допустим, результатом формулы должен был быть текст с числом — например, Итого 200 р. Если при введении текста Итого в формулу этот текст не заключен в двойные кавычки, Excel интерпретирует такие данные как имя, что вызывает ошибку.
Примечание: Имя — это слово, словосочетание или другой набор знаков, заданные пользователем и обозначающие ячейку, диапазон ячеек, формулу или константу.
- В формуле или функции используется имя, которое не было определено. Проверьте, что данное имя существует. На вкладке Формулы в группе Именованные ячейки выберите Диспетчер имен и выясните, присутствует ли данное имя в списке. Если данное имя отсутствует, его можно добавить его путем выбора команды Создание имени.
- Была допущена ошибка в написании имени. Для проверки правильности указания имен в строке формул нужно нажать клавишу F3, щелкнуть требуемое имя, а затем нажать ОК.
- В формуле или функции используется ссылка на другой лист, не заключенный в ординарные кавычки. Если имя другого листа или книги содержит небуквенные знаки или пробел, то это имя необходимо заключить в апострофы («).
У меня огромная база данных клиентов — покупателей. Каждый день в базе данных добавляется столбец, в котором указывается сумма выручки от каждого покупателя. Если покупатель ничего не купил, в ячейке ставится #Н/Д. Как мне просуммировать столбец, если там есть такие данные?
Самый простой способ решения такой проблемы — изменить принцип наполнения базы данных и не заполнять ячейки для покупателей, которые не производили покупки.
Но если основную таблицу изменить невозможно (по разным причинам), эту проблему можно попробовать решить с помощью функции БДСУММ.
Допустим, исходная таблица имеет следующий вид:
Применив функцию БДСУММ, мы сможем выбрать для суммирования те ячейки, которые не содержат значения #Н/Д. Функция БДСУММ имеет следующий синтаксис:
БДСУММ(база_данных, поле, условия) , где
- база_данных — это диапазон ячеек, с которыми будут проводиться действия.
- поле — это столбец, значения из которого будут суммироваться.
- условия — это набор условий, которые должны выполняться для значения ячейки, чтобы это значение суммировалось.
То есть, в функции нам нужно задать суммирование первого столбца нашей таблицы, при условии, что значение ячейки этого столбца не равно #Н/Д. Для этого сначала создадим условие — в любом удобном месте рабочего листа напишем условие #Н/Д и озаглавим эту ячейку так же как и столбец нужной нам базы данных.
БДСУММ(C2:C18;1;E2:E3) где
- C2:C18 — наша таблица,
- E2:E3 — наше условие.
Обратите внимание, что диапазоны базы данных, и условий обязательно должны содержать заголовки столбцов! При этом заголовок условия должен совпадать с заголовком столбца, над которым производятся вычисления!
Наш результат указан под таблицей:
Если же наша база данных содержит ошибки разных типов, достаточно добавить их в условия (и, соответственно, расширить диапазон условий в формуле), для того, чтобы получить нужный результат.
Этот способ также может использоваться для функций СЧЁТ, БСЧЁТА, ДМАКС, ДМИН, БДПРОИЗВЕД и им подобных.
Когда вы вводите или редактируете формулу, а также когда меняется одно из входных значений функции, Excel может показать одну из ошибок вместо значения формулы. В программе предусмотрено семь типов ошибок. Давайте рассмотрим их описание и способы устранения.
- #ДЕЛ/О!
— данная ошибка практически всегда означает, что формула в ячейке пытается разделить какое-то значение на ноль. Чаще всего это происходит из-за того, что в другой ячейке, ссылающейся на данную, находится нулевое значение или значение отсутствует. Вам необходимо проверить все связанные ячейки на предмет наличия таких значений. Также данная ошибка может возникать, когда вы вводите неправильные значения в некоторые функции, например в ОСТАТ() , когда второй аргумент равен 0. Также ошибка деления на ноль может возникать, если вы оставляете пустые ячейки для ввода данных, а какая-либо формула требует некоторые данные. При этом будет выведена ошибка #ДЕЛ/0!
, что может смутить конечного пользователя. Для этих случаев вы можете использовать функцию ЕСЛИ() для проверки, например =ЕСЛИ(А1=0;0;В1/А1) . В этом примере функция вернет 0 вместо ошибки, если в ячейке А1 находится нулевое или пустое значение. - #Н/Д
— данная ошибка расшифровывается как недоступно, и это означает, что значение недоступно функции или формуле. Вы можете увидеть такую ошибку, если введете неподходящее значение в функцию. Для исправления проверьте прежде всего входные ячейки на предмет ошибок, особенно если в них тоже появляется данная ошибка. - #ИМЯ?
— данная ошибка возникает, когда вы неправильно указываете имя в формуле или ошибочно задаете имя самой формулы. Для исправления проверьте еще раз все имена и названия в формуле. - #ПУСТО!
— данная ошибка связана с диапазонами в формуле. Чаще всего она возникает, когда в формуле указывается два непересекающихся диапазона, например =СУММ(С4:С6;А1:С1) . - #ЧИСЛО!
— ошибка возникает, когда в формуле присутствуют некорректные числовые значения, выходящие за границы допустимого диапазона. - #ССЫЛКА!
— ошибка возникает, когда были удалены ячейки, на которые ссылается данная формула. - #ЗНАЧ!
— в данном случае речь идет об использовании неправильного типа аргумента для функции.
Если при вводе формулы вы случайно неправильно расставили скобки, Excel выведет на экран предупреждающее сообщение — см. рис. 1. В этом сообщении вы увидите предположение Excel о том, как их необходимо расставить. В случае если вы подтверждаете такую расстановку, нажмите Да
. Но зачастую требуется собственное вмешательство. Для этот нажмите Нет
и исправьте скобки самостоятельно.
Обработка ошибок с помощью функции ЕОШИБКА()
Перехватить любые ошибки и обработать их можно с помощью функции ЕОШИБКА() . Данная функция возвращает истину или ложь в зависимости от того, появляется ли ошибка при вычислении ее аргумента. Общая формула для перехвата выглядит так: =ЕСЛИ(ЕОШИБКА(выражение);ошибка; выражение) .
Функция если вернет ошибку (например, сообщение), если при расчете появляется ошибка. Например, рассмотрим следующую формулу: =ЕСЛИ(ЕОШИБКА(А1/А2);»»; А1/А2) . При возникновении ошибки (деление на 0) формула возвращает пустую строку. Если же ошибки не возникает, возвращается само выражение А1/А2 .
Существует другая, более удобная функция ЕСЛИОШИБКА() , которая совмещает две предыдущие функции ЕСЛИ() и ЕОШИБКА() : ЕСЛИОШИБКА(значение;значение при ошибке) , где: значение
— выражение для расчета, значение при ошибке
— возвращаемый результат в случае ошибки. Для нашего примера это будет выглядеть так: =ЕСЛИОШИБКА(А1/А2;»») .
Вопросы про ошибки в Эксель – самые распространенные, я их получаю каждый день, ими наполнены тематические форумы и сервисы ответов. Очень легко допустить ошибку в формуле Excel, особенно когда работаешь быстро и с большим количеством данных. Результат – неправильные расчеты, недовольные руководители, убытки… Как же найти ошибку, которая закралась в Ваших расчетах? Давайте разбираться. Единого инструмента или алгоритма поиска ошибок нет, поэтому будем двигаться от простого к сложному.
Если в ячейке формула вместо результата
Если Вы написали формулу в ячейке, нажали Enter, а вместо результата в ней отображается сама формула – значит выбран текстовый формат значения для данной ячейки. Как исправить? Сначала изучите, и выберите тот, который нужен Вам, но не текстовый, в этом формате вычисления не производятся.
Теперь на ленте найдите Главная – Число
, и в раскрывающемся списке выберите подходящий формат данных
. Сделайте это для всех ячеек, в которых формула стала обычным текстом.
Если формулы на листе не пересчитываются
Если Вы изменяете исходные данные, а формулы на листе никак не хотят пересчитываться – у Вас отключен автоматический пересчет формул.
Чтобы это исправить – нажмите на ленте: Формулы – Вычисления – Параметры вычислений – Автоматически
. Теперь все будет пересчитываться, как обычно.
Помните, автоматический пересчет мог быть отключен целенаправленно. Если у Вас на листе огромное количество формул – каждое внесение изменений заставляет их пересчитываться. В итоге, работа с документом перерастает в хроническое состояние ожидания после каждого изменения. В таком случае, нужно перевести пересчет в ручной режим: Формулы – Вычисления – Параметры вычислений – Вручную
. Теперь вносите все изменения в исходные данные, программа будет ждать. Когда все изменения внесены – жмите F9
, все формулы обновят значения. Или cнова включите автоматический пересчет.
Если ячейка заполнена знаком решетки
Еще одна классическая ситуация, когда в результате расчетов Вы получаете не результат, а ячейку, заполненную знаками решетки:
На самом деле, это не ошибка, так программа говорит Вам, что результат не влазит в ячейку, нужно просто до нужного размера.
Результат вычисления – не в том формате
Иногда случается, что после выполнение вычислений, результат предстает не в том виде, который Вы ожидаете. Например, сложили два числа, а в результате получили дату. Почему так происходит? Вероятно, формат данных в ячейке ранее был установлен «дата». Просто измените его на нужный, и все будет по-Вашему.
Когда недоступны внешние ссылки
Если Вы написали формулу, а она возвращает очевидно неправильный результат – разбираемся с логикой формулы. Вы могли банально ошибиться в скобках, порядке следования операторов. Изучите и проверьте все ли верно в Вашей. Если верно – переходим к следующему шагу.
Если Вы используете функции – убедитесь, что Вы знаете . Каждая из них имеет свой синтаксис. Проверьте, правильно ли Вы задали параметры для формулы, для чего прочтите справку по ней. Нажмите F1
и в окне «Справка Excel» в поиске напишите Вашу функцию, например, « ». Программа отобразит список доступных материалов по этой функции. Как правило, их хватает, чтобы получить полное представление о работе Вашей функции. Авторы справки очень доступно излагают материал, приводят примеры использования.
Часто пользователи неверно указывают ссылки на ячейки в формулах, от того и получают ошибочные результаты. Первое, что нужно сделать для проверки внешних формул – включить отображение формул в ячейках. Для этого выполните на ленте Формулы – Зависимости формул – Показать формулы
. Теперь в ячейках будут отображаться формулы, а не результаты расчетов. Можно пробежаться глазами по листу и проверить правильные ли ссылки указаны. Чтобы снова показать результаты – еще раз выполните ту же команду.
Чтобы упростить процесс – можно включить стрелки ссылок. Можно легко определить на какие ячейки ссылается формула, нажав Формулы – Зависимости формул – Влияющие ячейки
. На листе синими стрелками будет указано, на какие данные Вы ссылаетесь.
Аналогично, можно увидеть ячейки, формулы в которых ссылаются на заданную клетку. Для этого выполняем: Формулы – Зависимости формул – Зависимые ячейки
.
Учтите, что в сложных таблицах отрисовка стрелок займет много времени и машинных ресурсов. Чтобы убрать стрелки – кликните Формулы – Зависимости формул – Убрать стрелки
.
Как правило, внимательная проверка формул с перечисленными выше инструментами решает проблемы ошибочного результата. Ищем проблему до победы!
Если возникает циклическая ссылка в Эксель
Иногда после введения формулы программа предупреждает, что введена циклическая ссылка. Расчет прекращается. Это значит, что формула ссылается на ячейку, которая, в свою очередь, ссылается на ячейку, в которую Вы вводите формулу. Получается, замкнутый цикл вычислений, программа должна будет вычислять результат бесконечно долго. Но этого не будет, вы будете предупреждены и получите возможность устранить проблему.
Часто, ячейки ссылаются друг на друга косвенно, т.е. не напрямую, а через промежуточные формулы.
Чтобы найти такие «неправильные» формулы, найдите на ленте: Формулы – Зависимости формул – Проверка наличия ошибок – Циклические ошибки
. Это меню открывает список ячеек с «зацикленными» формулами. Кликните по любой, чтобы установить в нее курсор и проверить формулу.
Естественно, циклические ссылки устраняются путем проверки и исправления логики вычислений. Однако, в некоторых случаях, циклическая ссылка не будет ошибкой. То есть, этой системе формул все же нужно дать просчитаться до состояния, близкого к равновесию, когда изменения практически не происходят. Некоторые инженерные задачи требуют этого. К счастью, Excel это допускает. Называется такой подход «итеративные вычисления». Чтобы их включить, нажмите Файл – Параметры – Формулы
,и установите галку «Итеративные вычисления». Там же установите:
- Предельное число итерации
– максимальное количество итераций (циклов), которое будет проведено до полной остановки - Относительная погрешность
– минимальное изменение целевых значений за одну итерацию, при которых пересчет будет остановлен.
То есть циклическая формула будет просчитываться до достижения относительной погрешности, но не больше, чем задано предельным числом итераций.
Встроенные ошибки Excel
Иногда при вычислениях выпадают ошибки, начинающиеся со знака «#». Например, «#Н/Д», «#ЧИСЛО!», и т.д. эти ошибки я , прочтите этот пост и постарайтесь осмыслить причину появления Вашей ошибки. Когда это произойдет, Вы легко все исправите.
Если же Вам не удается найти ошибку в достаточно сложной формуле – кликните на восклицательный знак возле ячейки и в контекстном меню выберите «Показать этапы вычисления».
На экране появится окно, отображающее в какой из моментов вычисления возникает ошибка, он будет подчеркнут в формуле. Это верный способ понять, что именно не так.
Это, пожалуй, все основные способы найти и исправить ошибки в Эксель. Мы рассмотрели наиболее часто встречающиеся проблемы и способы их устранения. А вот что делать, когда ошибки нужно предусмотреть сразу в вычислениях, я расскажу в посте про . Не пожалейте на эту статью 5 минут времени, ее внимательное прочтение позволит сэкономить массу времени в будущем.
А я жду ваших вопросов и комментариев к этому посту!
Внесение даже небольшого изменения на рабочем листе Excel может привести к образованию ошибок в других ячейках. К примеру, вы можете случайно ввести значение в ячейку, которая раньше содержала формулу. Эта простая ошибка может оказать значительное влияние на другие формулы, и вы не сможете обнаружить ее, пока не сделаете какие-нибудь изменения на листе.
Ошибки в формулах делятся на несколько категорий:
Синтаксические ошибки:
Возникают при неправильном синтаксисе формулы. Например, формула имеет несоответствующие скобки, или функция имеет не корректное количество аргументов.
Логические ошибки:
В этом случает формула не возвращает ошибку, но имеет логический изъян, что является причиной неправильного результата расчета.
Ошибки неправильных ссылок:
Логика формул верна, но формула использует некорректную ссылку на ячейку. Простой пример, диапазон данных для суммирования в формуле СУММ может содержать не все элементы, которые вы хотите суммировать.
Семантические ошибки:
Например, название функции написано неправильно, в этом случае Excel вернет ошибку #ИМЯ?
Ошибки в формулах массивов:
Когда вы вводите формулу массива, по окончании ввода необходимо нажать Ctrl + Sift + Enter. Если вы не сделали этого, Excel не поймет, что это формула массива, и вернет ошибку или некорректный результат.
Ошибки неполных расчётов:
В этом случае формулы рассчитываются не полностью. Чтобы удостовериться, что се формулы пересчитаны, наберите Ctrl + Alt + Shift + F9.
Проще всего найти и скорректировать синтаксические ошибки. Чаще всего, вы знаете, когда формула содержит синтаксическую ошибку. К примеру, Excel не даст ввести формулу с несогласованными скобками. Иные ситуации синтаксических ошибок приводят к выводу следующих ошибок в ячейке листа.
Ошибка #ДЕЛ/0!
Если вы создали формулу, в которой производится деление на ноль, Excel вернет ошибку #ДЕЛ/0!
Так как Excel воспринимает пустую ячейку как ноль, то при делении на пустую ячейку тоже будет возвращена ошибка. Эта проблема часто встречается при создании формулы для данных, которые еще не были введены. Формула ячейки D4 была протянута на весь диапазон (=C4/B4).
Эта формула возвращает отношение значений колонок C к B. Так как не все данные по дням были занесены, формула вернула ошибку #ДЕЛ/0!
Чтобы избежать ошибки, вы можете воспользоваться , для проверки, являются ли ячейки колонки B пустыми или нет:
ЕСЛИ(B4=0;»»;C4/B4)
Эта формула вернет пустое значение, если ячейка B4 будет пустой или содержать 0, в противном случае вы увидите посчитанное значение.
Другим подходом является использование функции ЕСЛИОШИБКА, которая проверяет на наличие ошибки. Следующая формула вернет пустую строку, если выражение C4/B4 будет возвращать ошибку:
ЕСЛИОШИБКА(C4/B4;»»)
Ошибка #Н/Д
Ошибка #Н/Д возникает в случаях, когда ячейка, на которую ссылается формула, содержит #Н/Д.
Обычно, ошибка #Н/Д возвращается в результате работы . В случае, когда совпадение не было найдено.
Чтобы перехватить ошибку и отобразить пустую ячейку, воспользуйтесь функцией =ЕСНД().
ЕСНД(ВПР(A1;B1:D30;3;0);»»)
Обратите внимание, что функция ЕСНД является новой функцией в Excel 2013. Для совместимости с предыдущими версиями воспользуйтесь аналогом этой функции:
ЕСЛИ(ЕНД(ВПР(A1;B1:D30;3;0));»»;ВПР(A1;B1:D30;3;0))
Ошибка #ИМЯ?
Excel может вернуть ошибку #ИМЯ? в следующих случаях:
- Формула содержит неопределенный именованный диапазон
- Формула содержит текст, который Excel интерпретирует как неопределенный именованный диапазон. Например, неправильно написанное имя функции вернет ошибку #ИМЯ?
- Формула содержит текст не заключенный в кавычки
- Формула содержит ссылку на диапазон, у которого отсутствует двоеточие между адресами ячеек
- Формула использует функцию рабочего листа, которая была определена надстройкой, но надстройка не была установлена
Ошибка #ПУСТО!
Ошибка #ПУСТО! возникает в случае, когда формула пытается использовать пересечение двух диапазонов, которые фактически не пресекаются. Оператором пересечения в Excel является пробел. Следующая формула вернет #ПУСТО!, так как диапазоны не пересекаются.
Ошибка #ЧИСЛО!
Ошибка #ЧИСЛО! будет возвращена в следующих случаях:
- В числовом аргументе формулы введено нечисловое значение (например, $1,000 вместо 1000)
- В формуле введен недопустимый аргумент (например, =КОРЕНЬ(-12))
- Функция, использующая итерацию, не может рассчитать результат. Примеры функций, использующих итерацию: ВСД(), СТАВКА()
- Формула возвращает значение, которое слишком большое или слишком маленькое. Excel поддерживает значения между -1E-307 и 1E-307.
Ошибка #ССЫЛКА!
- Вы удалили колонку или строку, на которую ссылалась ячейка формулы. Например, следующая формула вернёт ошибку, если первая строка или столбцы A или B были удалены:
- Вы удалили рабочий лист, на которую ссылалась ячейка формулы. Например, следующая формула вернёт ошибку, если Лист1
был удален:
- Вы скопировали формулу в расположение, где относительная ссылка становится недействительной. Например, при копировании формулы из ячейки A2 в ячейку A1, формула вернет ошибку #ССЫЛКА!, так как она пытается обратиться к несуществующей ячейке.
- Вы вырезаете ячейку и затем вставляете ее в ячейку, на которую ссылается формула. В этом случае будет возвращена ошибка #ССЫЛКА!
Ошибка #ЗНАЧ!
Ошибка #ЗНАЧ! является самой распространенной ошибкой и возникает в следующих ситуациях:
- Аргумент функции имеет неверный тип данных или формула пытается выполнить операцию, используя неверные данные. Например, при попытке сложения числового значения с текстовым, формула вернет ошибку
- Аргумент функции является диапазоном, когда он должен быть одним значением
- Пользовательские функции листа не рассчитываются. Для принудительного пересчета нажмите Ctrl + Alt + F9
- Пользовательская функция листа пытается выполнить операцию, которая не является допустимой. Например, пользовательская функция не может изменить среду Excel или сделать изменения в других ячейках
- Вы забыли нажать Ctrl + Shift + Enter при вводе формулы массива
При создании сложных формул (да и просто невнимательности) в MS Excel ошибку совершить довольно легко. Обычно MS Excel в таких случаях выводит сообщения об ошибках или даже предлагает «правильный» на его взгляд вариант написания формулы, однако даже при наличии справочной системы, поначалу довольно сложно понять, чего же хочет от нас «глупая программа». В этой статье мы рассмотрим все типы ошибок возникающих в формулах MS Excel, и научимся их исправлять и понимать.
Ошибка #ЗНАЧ! (ошибка в значении)
Если бы был «топ ошибок MS Excel», первое место в нем принадлежало бы ошибке #ЗНАЧ!
. Как можно догадаться из названия, возникает она в том случае, когда в формулу или функцию подставлено неправильное значение. Если вы пытаетесь провести арифметические операции с текстом, или подставляете в функцию диапазон ячеек, когда требуется указать всего одну ячейку, результатом вычислений будет ошибка #ЗНАЧ!.
Как и говорилось — попытка сложить число и текст ставит MS Excel в тупик
Ошибка #ССЫЛКА! (неправильная ссылка на ячейку)
Одна из самых частых ошибок при вычислениях. Обозначает самую простейшую вещь — в формуле используется ссылка на ячейку которую вы или не создавали или ненароком удалили. Чаще всего #ССЫЛКА!
возникает когда вы удаляете «ненужный» столбец, некоторые ячейки которого, как оказывается, участвовали в вычислениях.
Ошибка #ДЕЛ/0! (деление на ноль)
Со школьной скамьи мы помним простое правило: на ноль делить нельзя! Ошибка #ДЕЛ/0!
— это предупреждение от MS Excel о том, что это базовое правило нарушено и вы все-таки пытаетесь разделить некое число на ноль. При этом сам «ноль» не обязателен — любая попытка разделить существующее число на «пустую» ячейку также вызовет эту ошибку.
Делить на ноль нельзя — пустая ячейка воспринимается MS Excel как тот же ноль
Ошибка #Н/Д (значение недоступно)
Ошибка #Н/Д
возникает в том случае, если в функции пропущен какой-то аргумент, или одно из используемых в формуле значений становится недоступно. Увидел #Н/Д — первым делом ищи чего в твоих вычислениях не хватает.
Применяю функцию ВПР, знак разделения поставил, а вот указать к какой ячейке он относится — забыл
Ошибка #ИМЯ? (недопустимое имя)
Ошибка #ИМЯ
— признак того, что вы и Excel друг друга не поняли. Вернее MS Excel не понял что вы имели ввиду — вы явно указываете на какой-то элемент, а программа его не может найти. В каких случаях это обычно происходит?
- В функции указана ячейка или диапазон ячеек с несуществующим (чаще всего с неправильно введенным) именем.
Попытка суммировать несуществующий диапазон с названием Столбец
- Текст внутри функции заключается в кавычки. Если этого не происходит (то есть вместо =»Вася» мы вводим =Вася), MS Excel приходит в полное недоумение.
Ещё одна простейшая ошибка — текст в функциях и формулах указывается в кавычках
- В названии функции случайно допущена опечатка.
Ошибка #ПУСТО! (пустое множество)
Ошибка #ПУСТО
чаще всего возникает когда в формуле пропущен один из операторов, но может возникать и в том случае, когда нам требуется найти пересечение двух диапазонов ячеек, а этого пересечения просто не существует.
Все бы хорошо, но забыл про второй знак «+»
Ошибка #ЧИСЛО! (неправильное число)
Ошибку #ЧИСЛО!
ms Excel выдает в тех случаях, когда результат математических вычислений в формуле порождает какой-то совершенно нереальный результат. Результат в виде предельно большого или малого числа, попытка вычислить корень из отрицательного числа — все это приведет к возникновению ошибки #ЧИСЛО!
Вычислить корень из отрицательного числа? Вас бы не понял не только Excel
Знаки «решетки» в ячейке Excel (#######)
В прошлом весьма распространенная «ошибка» MS Excel связанная с внезапным заполнением ячейки знаками решетки (#) могла быть вызвана тем, что в ячейку введено число которое не помещается в ней целиком (но только если ячейка имеет формат «числовой» или «дата»).
С появлением MS Office 2013 ошибка практически сошла на нет, так как «поумневший» Excel стал в большинстве случаев автоматически увеличивать ширину ячейки под число. Если же вы видите «решетки», проще всего избавиться от них увеличив ширину ячейки вручную.
Достаточно увеличить ширину столбца и проблема исчезнет
Если вы знаете в каких случаях в экселе возникает та или иная ошибка, вы скорее всего сразу поймете чем она вызвана. Однако программа ещё более упрощает вам работу и выводит рядом с ошибочным значением спецсимвол в виде значка восклицательного знака в желтом ромбе. При нажатии на него, вам будет предложен список возможных действий по исправлению ошибки.
Нажмите на значок, чтобы получить помощь в исправлении ошибки
В первой строке появившегося контекстного меню вы увидите полное название ошибки, во второй сможете вызвать подробную справку по ней, но самое интересное скрывает в себе третий пункт: «Показать этапы вычисления…
«.
«Показать этапы вычисления…» — программу не обманешь, точно выводит фрагмент формулы где допущена ошибка
Нажмите на него и в появившемся окне увидите тот самый фрагмент формулы где допущена ошибка — это особенно удобно, когда «распутывать» приходится целый клубок из громады вложенных друг в друга действий.
Обзор ошибок, возникающих в формулах Excel
Смотрите такжеВначале вписать форматирующий символ. вычисления результата. В первом аугменте проверкой ошибок – поэтому после ее второй массив из сделано правильно в.Но, лучший вариант, сложить число и «;#» A5 меньше чем в одной формуле на ячейку, которая двоеточия:
Несоответствие открывающих и закрывающих скобок
возвращает подобный результат.Ошибки в Excel возникаютИзменить формат ячейки наДальше нужно выделить все функции ПОИСКПОЗ мы это количество определенного ввода для подтверждения номеров столбцов с строке формул появятсяПримечание: чтобы не отслеживать
текст, и получить, т. д. 31 500, значение умножается несколько раз (иногда не существует илиВ имени функции допущенаВ данном случае увеличение довольно часто. Вы,
текстовый. числа и формулу, указываем код ошибки, типа ошибок. Чтобы нажмите комбинацию горячих количеством элементов соответствующему фигурные скобки, какСтрока формул указывает, пустые ячейки или результат цифрой поРассмотрим какие бывают на 15 %. Но в сочетании с удалена.
Ячейка заполнена знаками решетки
опечатка: ширины столбца уже наверняка, замечали странныеВ ячейке А1 реализуем чтобы уменьшить разрядность
-
- которую нужно найти. получить такой результат клавиш CTRL+SHIFT+Enter. Если количеству столбцов в на рисунке. что это формула
ячейки с нулем, этой конкретной формуле.
- которую нужно найти. получить такой результат клавиш CTRL+SHIFT+Enter. Если количеству столбцов в на рисунке. что это формула
- ошибки при написании ЕСЛИ это не другими функциями). КНапример, на рисунке нижеОшибка не поможет. значения в ячейках, первый способ, а для округления. В третьем аргументе следует использовать третью
все сделано правильно диапазоне A3:Z3.Таблица с большим объемом
Ошибка #ДЕЛ/0!
массива, заключая её это установить формулуИсправляем это слово в формулы и так, проверьте, меньше сожалению, из-за сложности представлена формула, которая#ПУСТО!Ошибка вместо ожидаемого результата, в А2 –
Ошибка #Н/Д
Как видите, в результате мы указываем код формулу: в строке формулСкачать пример поиска ошибок данных содержит ошибки, в фигурные скобки с условием, с ячейке на число
- как найти ошибку в ли это значение, конструкции выражений с суммирует значения двухвозникает, когда задано#ДЕЛ/0! которые начинались со второй. получаем абсурд: 1+1=3.
- 0 для функцииНа этот раз формула появятся фигурные скобки. в формулах Excel первая из которых {}. Их не
- функцией «ЕСЛИ», например. или удаляем это формуле Excel, и чем 72 500. ЕСЛИ ЕСЛИ легко столкнуться ячеек. пересечение двух диапазонов,возникает, когда в знакаЗадание 1. В ячейку Никакие форматы здесь ПОИСКПОЗ, который означает не должна выполнятьсяТаким образом получаем текущее
Благодаря функции ЕСЛИ в находится в диапазоне нужно вводить самостоятельно.
Ошибка #ИМЯ?
В Excel логических слово, т. д. как исправить эти это так, значение с ошибкой #ЗНАЧ!.Если удалить столбец B,
- не имеющих общих Excel происходит деление#
- А1 введите слово не помогут. Решить что возвращать нужно в массиве поэтому
количество ошибок в первом массиве логическое
- третей строки листа Они исчезнут, когда
- функций «ЕСЛИ» много Формула посчитает все
Ошибка #ПУСТО!
ошибки. умножается на 25 %; Обычно ее можно формула вернет ошибку точек. на ноль. Это
- . Это говорит о с форматирующим символом данный вопрос поможет первое встречающееся значение после ввода для таблице. значение ИСТИНА заменяется 3:3. вы начнете редактировать разны, с разными правильно.Ошибка в
- в противном случае — подавить, добавив в#ССЫЛКА!Например, может быть, как том, что формула так: «’истина». Обязательно только функция «ОКРУГЛ». 2 при наличии
Ошибка #ЧИСЛО!
ее подтверждения достаточноРазбор формулы для подсчета на соответственное числовое формулу.
- условиями. Подробнее обОшибка «# ИМЯ?» вExcel «# # # на 28 % формулу функции для.
- =А1:А10 C5:E5 явное деление на возвращает ошибку. Чтобы следует поставить в Запишите формулу с дубликатов в массиве. просто нажать клавишу количества всех ошибок значение из второго
Опираясь на результат вычисленияПояснение: этих функциях читайтеExcel
- # #». обработки ошибок, такиеЕще пример. Формула в– это формула, ноль, так и избавиться от ошибки, начале слова символ функцией так: =ОКРУГЛ(A1;0)+ОКРУГЛ(A2;0)Читайте также: Как найти Entеr. в ячейках Excel: массива. После чего этой формулы можно
Ошибка #ССЫЛКА!
Диапазон (массив констант), созданный в статье «Функция.(Чтобы использовать функцию ЕСЛИОШИБКА как ЕОШИБКА, ЕОШ ячейке B2 ссылается
- использующая оператор пересечения, деление на ячейку, Вы должны исправить апострофа «’», который
Как правильно округлить и ошибку в таблицеТретья формула возвращает количествоС помощью функции ЕОШИБКА
- функция МИН выбирает составить другую формулу, с помощью функции «ЕСЛИ» в Excel»В Excel oшибкарешетка
с уже имеющейся или ЕСЛИОШИБКА. на ячейку B1, которая должна вернуть которая содержит ноль ее причину, а можно ввести с суммировать числа в Excel по формуле
Ошибка #ЗНАЧ!
ошибок деления на проверена каждая ячейка наименьшее числовое значение которая уже неIF и статьях, перечисленных «#ИМЯ?» возникает, когда). формулой, просто вложитеЕсли имеется ссылка на т.е. на ячейку, значение ячейки, находящейся или пуста.
- они могут быть английской раскладки клавиатуры столбце таблицы Excel?
- Внимание! В четвертой формуле 0 (#ДЕЛ/0!). Но диапазона A2:A9 на первого массива, которое просто определить строку(ЕСЛИ), хранится в внизу, в разделе в формуле неверно
- Эта ошибка показывает, готовую формулу в ячейку с ошибочным расположенную выше на на пересечении двухОшибка самыми разными. (в русской раскладке Если этих чисел
мы ссылались на она не мене наличие ошибочных значений. соответствует номеру столбца или столбец, а памяти Excel, а «Другие статьи по написано название функции,
что столбец недостаточно
office-guru.ru
Исправление ошибки #ЗНАЧ! в функции ЕСЛИ
функцию ЕСЛИОШИБКА: значением, функция ЕСЛИ 1 строку. диапазонов. Поскольку диапазоны#Н/ДСамым распространенным примером возникновения символа апострофа нет). будет целый столбец, диапазон ячеек начиная эффективно работает если Результаты функции в содержащего первую ошибку. укажет непосредственный адрес не в ячейках этой теме». диапазона, ячейки, т. широкий и всё=ЕСЛИОШИБКА(ЕСЛИ(E2
Проблема: аргумент ссылается на ошибочные значения.
возвращает ошибку #ЗНАЧ!.Если мы скопируем данную не имеют точеквозникает, когда для
ошибок в формулах Тогда Excel скроет то для быстрого с A1 и во втором аргументе памяти программы образуют Так как били ошибки на листе листа.Для примера, мы е. какого-то имени. число не входитЭто означает, что ЕСЛИ
-
Решение формулу в любую
-
пересечения, формула вернет формулы или функции Excel является несоответствие
первый символ и получения точных расчетов
-
до A9. Потому функции СЧЕТЕСЛИ указать собой массив логических вычислены номер строки Excel. Для решенияМассив констант выглядит следующим написали такую формулу. Например, написали в в ячейку. в результате вычисления: используйте с функцией ячейку 1-й строки#ПУСТО! недоступно какое-то значение. открывающих и закрывающих будет воспринимать слова
-
следует использовать массив как функция ПОИСКПОЗ
Проблема: неправильный синтаксис.
другой тип ошибки значений ИСТИНА и и столбца завершается
данной задачи ниже образом: {1;»»;1;»»;»»;»»;»»;»»;1}. =ЕСЛИ(B1=0;»»;A1/B1) формуле адрес ячейкиИсправить эту ошибку какой-либо части исходной ЕСЛИ функции для (например, ячейку D1),. Приведем несколько случаев
скобок. Когда пользователь
«истина» как текст, функций. Для этого возвращает текущею позицию в ячейках Excel. ЛОЖЬ. После перемножения вычисление формулы функцией (в ячейку AB3)Этот массив констант используетсяПояснения к формуле В1 русской буквой можно, увеличив ширину формулы возвращается ошибка, обработки ошибок, такие формула вернет ошибкуТакже данная ошибка возникнет,
возникновения ошибки вводит формулу, Excel а не логический мы введем такую значения относительно таблицы,
Например, #ИМЯ?
каждого логического значения АДРЕС. Она уже введите другую формулу: в качестве аргумента. «Б». Вышла ошибка. столбца. Какими способами выводится значение 0, как ЕОШИБКА, ЕОШ#ССЫЛКА! если случайно опустить#Н/Д автоматически проверяет ее тип данных. формулу: =СУММ(ОКРУГЛ(A1:A7;0)). После а не целогоКак видно на рисунке на число 1 возвращает текстовым значениемДанная формула так же для функцииЕсли в ячейкеПроверяем вычисления в формуле увеличить размер столбца,
а в противном и ЕСЛИОШИБКА. В, т.к. в ней один из операторов: синтаксис и неЗадание 2. Перейдите на ввода массива функций листа. Поэтому во все работает не в результате получаем готовый адрес ячейки должна выполняться вCOUNT В1 стоит нуль, поиском ошибок. Excel установить автоподбор ширины
У вас есть вопрос об определенной функции?
случае возвращается результат следующих разделах описывается,
Помогите нам улучшить Excel
будет присутствовать ссылка в формуле. КФункция поиска не находит даст закончить ввод, ячейку А2 и следует нажимать не втором аргументе функции
support.office.com
Ошибки в формулах Excel.
менее эффективно. массив из чисел на основе номера массиве, поэтом после (СЧЁТ), давая результат то оставить ячейку подчеркнула ошибку.
столбца, т. д., выражения ЕСЛИ. Некоторые как использовать функции на несуществующую ячейку. примеру, формулу соответствия. К примеру, пока в ней
вызовите диалоговое окно «Enter», а комбинацию ПОИСКПОЗ следует указыватьЧтобы узнать в какой 1 и 0. столбца и строки
ее ввода снова 3. С1 пустой. ЕслиИсправляем ошибку. смотрите в статье
пользователи при создании ЕСЛИ, ЕОШИБКА, ЕОШОшибка=А1*А2*А3 функция присутствует синтаксическая ошибка. «Формат ячеек». Например, клавиш Ctrl+Shifi+Enter. В диапазон просматриваемых значений строке встречается первая
Потом все элементы
указанных в ее для подтверждения жмемДля подсчета специфических ошибок
в ячейке В1Ошибка «# ССЫЛКА!» в «Как изменить ширину формул изначально реализуют и ЕСЛИОШИБКА в#ЗНАЧ!записать какВПРНапример, на рисунке выше с помощью комбинации результате Excel сам так, чтобы номера ошибка конкретного типа массива суммируются, а
аргументах.
комбинацию клавиш CTRL+SHIFT+Enter. используйте функцию стоит не нуль,Excel столбца, высоту строки обработку ошибок, однако формуле, если аргументодна из самых=А1*А2 A3при точном поиске мы намеренно пропустили клавиш CTRL+1 или подставит фигурные скобки позиций совпадали с и кода следует формула возвращает количество Часто складывается сложная ситуация,Результат вычисления локального адресаCOUNTIF то разделить ячейку
. в Excel». делать это не ссылается на ошибочные распространенных ошибок, встречающихся. вернет ошибку закрывающую скобку при
контекстным меню правой «{}» – это номерами строк листа. использовать четвертую формулу: ошибок. когда некоторые формулы
ячейки, которая содержит (СЧЁТЕСЛИ). Например, чтобы А1 на ячейку
Эта ошибка появляется,Получится так. рекомендуется, так как значения. в Excel. ОнаОшибка#Н/Д вводе формулы. Если кнопкой мышки. На значит, что функция Другими словами, еслиКак показано на очередном
вместо ожидаемых результатов
первую ошибку в подсчитать количество ячеек, В1.
если в формулеОшибка «# ЗНАЧ!» в обработчик подавляет возможныеИсправление ошибки #ЗНАЧ! в возникает, когда значение#ЧИСЛО!
, если соответствий не нажать клавишу вкладке «Число» в выполняется в массиве. бы мы указали рисунке, формула возвращаетПользователю для анализа вычислительных вычисления выдает информацию таблице:
содержащих ошибкуПолучилось так. указана не существующаяExcel ошибки и вы функции СЦЕПИТЬ одного из аргументов
возникает, когда проблема найдено.Enter списке числовых форматов Результат вычисления массива адрес диапазона A2:A9, значение 4 которое
циклов полезно знать об ошибке. ОсобенноПринцип действия формулы для
#DIV/0!В Excel можно в таблице ячейка,. не будете знать,Исправление ошибки #ЗНАЧ! в формулы или функции в формуле связанаФормула прямо или косвенно, Excel выдаст следующее выберите «текстовый» и
функций на картинке: то формула вернула соответствует номеру строки не только текущее полезной оказывается формула поиска ошибок:(#ДЕЛ/0!), используйте формулу:
сравнивать значения ячеек. диапазон ячеек, т.В Excel ошибка правильно ли работает функции СРЗНАЧ или содержит недопустимые значения. со значением. обращается к ячейке, предупреждение: нажмите ОК. ПослеМожно пойти еще более
бы значение 5 где впервые встречается количество неисправленных ошибок,
способная быстро находитьВ первом аргументе функции
=COUNTIF(A3:C3,»#DIV/0!») Используя функции сравнивания, д. «#ЗНАЧ!» указывает на формула. Если вам СУММ Самые распространенные случаиНапример, задано отрицательное значение в которой отображается
В некоторых случаях Excel
чего введите в рискованным путем, но – что не ошибка деления на но и строку, и подсчитывать количество АДРЕС указываем номер=СЧЁТЕСЛИ(A3:C3;»#ДЕЛ/0!») можно начислить премию
excel-office.ru
Подсчёт ошибок в Excel
Например, у нас то, что значение нужно добавить обработчикПримечания:
- возникновения ошибки там, где должно значение предлагает свой вариант ячейку А2 слово его применять крайне
является правильным.
0.
которая содержит первую ошибочных значений в строки, который долженУрок подготовлен для Вас сотрудникам, расчитать другие была таблица с в ячейке написано
- ошибок, лучше сделать #ЗНАЧ! быть положительное. Яркий#Н/Д исправления ошибки. Вы «истина». не рекомендуется! Можно
Excel старается облегчить наш
Функция ТИП.ОШИБКИ проверяет каждую
- ошибку. Чтобы узнать таблицах с большим быть возвращен в
командой сайта office-guru.ru данные, т.д. Подробнее формулами. В процессе не в том это тогда, когдаФункция ЕСЛИОШИБКА появилась в: пример – квадратный. можете либо согласиться
- Задание 3. Для сравнения
- заставить Excel изменять труд разными подсказками ячейку в диапазоне в какой строке объемом данных. А адресе ячейки содержащейИсточник: http://www.excel-easy.com/examples/count-errors.html
- об этом, читайте работы, мы удалили
- формате. Например, в вы будете уверены, Excel 2007. ОнаФормула пытается применить стандартные корень из отрицательногоПри работе с массивами
- с Excel, либо напишите тоже слово содержимое ячейки в и авто-подстановками. Если A1:A9, если она листа встречается первая иногда нужно просто результат действия целой
Перевела: Ольга Гелих
в статье "Функция
не нужный, теперь, формуле сложения в
что формула работает
гораздо предпочтительнее функций
математические операторы к
office-guru.ru
Как найти ошибку в таблице Excel по формуле
числа. в Excel, когда исправить формулу самостоятельно. в ячейке А3 зависимости от ее все это выполняется наталкивается на ошибку ошибка следует воспользоваться посчитать ошибку в формулы. Номер строкиАвтор: Антон Андронов
Поиск ошибок в Excel формулой
сравнения в Excel». столбец. Но формула диапазоне ячеек есть правильно. ЕОШИБКА и ЕОШ, тексту.К тому же, ошибка аргументы массива имеют В любом случае без апострофа и
формата. Для этого вместе с нашими возвращает соответствующий ей другой формулой:
Excel как числовое определен предыдущей формулойЧтобы сэкономить время наЭтот пример покажет, как с ячейками этого ячейка с текстом,Примечание: так как неВ качестве аргументов функции#ЧИСЛО!
меньший размер, чем слепо полагаться на изменений форматов. следует зайти «Файл»-«Параметры»-«Дополнительно» ожиданиями мы в номер (например, код
Она также должна быть
Как получить адрес ячейки с ошибкой
значение. и является числом визуальный анализ больших создать формулу массива, столбца осталась в не с числом. Значения в вычислениях разделяются требует избыточности при используются данные несоответствующеговозникает, когда возвращается результирующий массив. В это исправление ни
Как видите, апостроф виден и в разделе восторге от этой ошибки деления на выполнена в массивеПеред тем как исправлять
3. Поэтому мы таблиц с целью которая подсчитывает количество другом столбце.
Формула не может точкой с запятой.
построении формулы. При типа. К примеру, слишком большое или этом случае в в коем случае только в строке «При пересчете этой программы. Но если ноль: для типа поэтому снова для ошибки в Excel только ссылаемся на выявления ошибок, рационально ошибок в диапазоне.Мы видим, что в сложить все ячейки, Если разделить два использовании функций ЕОШИБКА номер столбца в слишком малое значение. незадействованных ячейках итогового нельзя. Например, на формул. книги:» указать «задать авто-подстановка является ошибочной #ДЕЛ/0! – это подтверждения нажмите комбинацию
хорошо бы предоставить ячейку AB2 с применить формулы дляМы используем функции формуле нашего примера п. э. выдает значения запятой, функция и ЕОШ формула функции Например, формула массива отобразятся значения следующем рисунке ExcelПримечание. В ячейках А1 точность как на мы просто выходим код 2). Ниже
горячих клавиш CTRL+SHIFT+Enter. пользователю Excel возможность,
первой формулой. Далее определения их местонахождения.IF складываются три ячейки, ошибку. ЕСЛИ будет рассматривать вычисляется дважды: сначалаВПР=1000^1000#Н/Д предложил нам неправильное и А2 символы экране». Появиться предупреждение: из себя. приведена целая таблицаПервая ошибка находиться в наблюдать в режиме с помощью функции Например, будет весьма(ЕСЛИ) и а в таблицеКстати!
exceltable.com
Как посчитать ошибки в Excel с учетом их кодов
их как одно проверяется наличие ошибок,задан числом меньшевернет как раз.Например, на рисунке ниже решение. текста не были «Данные будут измененыНапример, ошибки при округлении типов и кодов третьей строке рабочего реального времени сколько ДВССЫЛ определяется ссылка полезной информация оISERROR
Как посчитать ошибку в формуле Excel
всего две ячейки,Может быть и дробное значение. После а затем возвращается 1. эту ошибку. видно, что результирующийБывают случаи, когда ячейка сменены на большие, — точность будет дробных чисел и для обработки ошибок листа Excel. еще осталось ошибок
на диапазон, который локализации первой возникшей(ЕОШИБКА) для проверки п. ч. мы число написано в процентных множителей ставится результат. При использованииАргумент функции должен иметьНе забывайте, что Excel массив C4:C11 больше, в Excel полностью
- а значит не понижена!»
- т.п. Давайте разберемся Excel:Рассмотрим, как работает такая в процессе анализа должен быть найден ошибки относительно строк ошибок: удалили один столбец. текстовом формате –
символ %. Он функции ЕСЛИОШИБКА формула единственное значение, а
поддерживает числовые величины чем аргументы массива заполнена знаками решетки.
была выполнена авто-подстановка,Внимание!!! Работая в таком почему часто возникаютТИП формула: вычислительных циклов формул. в соответствии с и столбцов листа.=IF(ISERROR(A1),1,»»)Исправить ошибку можно, это, тоже, вызовет сообщает Excel, что вычисляется только один вместо этого ему от -1Е-307 до A4:A8 и B4:B8. Это означает один потому что слово
режиме, изменив один
Как найти первую ошибку в значении Excel
ошибки при скругленияхКОДНаподобие первой формулы с А для этого местом нахождения ошибок.Чтобы определить местонахождение ошибки=ЕСЛИ(ЕОШИБКА(A1);1;»») удалив эту ссылку ошибку. В Excel значение должно обрабатываться раз.
присваивают целый диапазон. 1Е+307.Нажав комбинацию клавиш из двух вариантов: воспринято программой как
раз количество разрядов, чисел? Ведь данная#ПУСТО!
помощью функции ЕОШИБКА нужно их все
Нет необходимости выполнять в таблице сПояснение: в формуле или есть два формата как процентное. ВКонструкция =ЕСЛИОШИБКА(Формула;0) гораздо лучше На рисунке нижеЕще одним случаем возникновенияCtrl+Shift+EnterСтолбец недостаточно широк для текст. уже нельзя вернуть операция играет очень1 в памяти программы посчитать. Пример схематической поиск по целой
Как посчитать ошибки Excel с определенным кодом
большим количеством строкФункция вернуть удаленный столбец – формат значения противном случае такие конструкции =ЕСЛИ(ЕОШИБКА(Формула;0;Формула)). в качестве искомого ошибки
, получим следующий результат: отображения всего содержимогоЗаполните данными ячейки, так исходные данные обратно. важную роль в#ДЕЛ/0! создается массив из
таблицы с ошибками таблице нагружая таким и столбцов рекомендуемIF в таблицу, или и формат ячейки. значения пришлось быЕсли синтаксис функции составлен значения функции#ЧИСЛО!
Ошибка ячейки. Для решения как показано ниже
Это путь только процессе формирования цен2 логических значений ИСТИНА в формулах:
образом процессор компьютера воспользоваться специальной формулой.(ЕСЛИ) возвращает 1, удалить всю формулу, Эти форматы влияют вводить как дробные неправильно, она может
Коды и типы ошибок Excel
ВПРявляется употребление функции,#ИМЯ? проблемы достаточно увеличить на рисунке: в одну сторону. и расчетов. Поэтому#ЗНАЧ! и ЛОЖЬ. ДалееНа рисунке для примера излишне отнимая вычислительные Для примера покажем если обнаружена ошибка. т.д.
на работу формул. | множители, например «E2*0,25». |
вернуть ошибку #ЗНАЧ!. | используется диапазон A6:A8. |
которая при вычислении | возникает, когда в |
ширину столбца, чтобы | Обычно комбинация символов набранных |
Поэтому лучше его | лучше как можно |
3 | функция СТРОКА возвращает |
проиллюстрированная проблемная ситуация, | ресурсы программы Excel. |
формулу, которая умеет | Если нет – |
Ошибка «# ДЕЛ/0!» в | Чтобы разобраться в |
Задать вопрос на форумеРешениеВот и все! Мы использует метод итераций формуле присутствует имя, все данные отобразились… в B3 должна не использовать. А раньше разобраться в#ССЫЛКА! текущие номера строк когда некоторые значения Нас интересует только легко работать с пустую строку.
Excel форматах, читайте статью сообщества, посвященном Excel
: проверьте правильность синтаксиса. разобрали типичные ситуации и не может которое Excel не…или изменить числовой формат быть воспринята как массив функций прекрасно данной особенности программы.4 листа в диапазоне таблицы содержит ошибки третья строка. большими диапазонами ячеек,Чтобы подсчитать ошибки, добавим. «Преобразовать дату вУ вас есть предложения Ниже приведен пример возникновения ошибок в вычислить результат. Ярким понимает. ячейки. формула и автоматически
exceltable.com
Ошибки Excel при округлении и введении данных в ячейки
и безопасно справляетсяКак правильно округлить и#ИМЯ? A2:A9. Благодаря функции вычислений формул вС помощью функции ЕОШИБКА в пределах A1:Z100. функциюЭта ошибка возникает, текст Excel». по улучшению следующей
правильно составленной формулы, Excel. Зная причину примером таких функцийНапример, используется текст неВ ячейке содержится формула, выполнен расчет. Но с данной задачей. суммировать числа в5 ЕСЛИ в массиве Excel там, где проверяется каждая ячейкаДля определения локализации первой
Ошибки при округлении дробных чисел
COUNT если делим наКак найти ошибку в
версии Excel? Если в которой функция ошибки, гораздо проще в Excel являются заключенный в двойные которая возвращает некорректное что если намЗдесь мы забегаем вперед, Excel?
#ЧИСЛО! с логическими значениями должны быть их в диапазоне A3:Z3
ошибки на листе(СЧЁТ) и заменим нуль или на формуле да, ознакомьтесь с ЕСЛИ вкладывается в исправить ее. УспеховСТАВКА
кавычки: значение даты или нужно записать текст но иногда безДля наглядного примера выявления6 ИСТИНА заменяется на результаты. Чтобы подсчитать на наличие ошибок. относительно строк следуетА1 пустую ячейку. РазделимExcel темами на портале другую функцию ЕСЛИ Вам в изучениииФункция ссылается на имя времени. Думаю, Вы именно таким способом этого сложно объяснить подобного рода ошибок
#Н/Д текущий номер строки. количество ошибок в На основании полученных использовать следующую формулу:на диапазон ячейку А1 на, смотрите в статье пользовательских предложений для для расчета вычетов Excel!ВСД диапазона, которое не знаете, что Excel и мы не решение важных задач. ведите дробные числа
7 После чего функция целой таблице следует результатов в памятиДанная формула должна выполнятьсяA1:C3 ячейку В1 (нуль). «Как проверить формулы Excel. на основе уровняАвтор: Антон Андронов.
существует или написано не поддерживает даты желаем вычислять результат?
1,3 и 1,4
Пишем в Excel слово ИСТИНА или ЛОЖЬ как текст
#ОЖИДАНИЕ_ДАННЫХ МИН выбирает наименьшее сделать так: программы создается массив
- в массиве, поэтом
- : Выйдет такая ошибка.
в Excel».Часто, вместо результата доходов.ЕСЛИ — одна из самых
Ошибка с опечаткой: до 1900 года. Решить данную задачуЗаставить программу воспринимать так как показано8 число из этогоВ ячейку C1 введите логических значений ИСТИНА после ее ввода=COUNTIF(IF(ISERROR(A1:C3),1,»»))Исправить эту ошибкуЗдесь Excel нам по формуле Excel=ЕСЛИ(E2 универсальных и популярных
#ССЫЛКА!В данном примере имя Поэтому, если результатом можно аналогичным способом слова логических типов на рисунке, аДалее создается в памяти же массива. следующую формулу: и ЛОЖЬ. Следующая для подтверждения нажмите=СЧЁТ(ЕСЛИ(ЕОШИБКА(A1:C3);1;»»)) можно, заменив в показывает, что стоит выходят ошибки. Например,
Обычным языком это можно функций в Excel,возникает в Excel, диапазон не определено. формулы оказывается такая
из примера описанного данных как текст под ними формулу
массив значений сСледующая полезная информация, котораяДанная формула должна быть функция СТОЛБЕЦ возвращает комбинацию горячих клавишЗакончим нажатием ячейке В1 нуль в ячейке текстошибка в
Отображение формул
выразить так: которая часто используется когда формула ссылается
Адрес указан без разделяющего дата, то Excel выше. можно двумя способами: для суммирования и номерами кодов ошибок. пригодиться пользователю занятым выполнена в массиве, в память программы CTRL+SHIFT+Enter. Если всеCtrl+Shift+Enter на число. (слово «масло»). НельзяExcel «#ИМЯ?», «#ЗНАЧ!», «#ССЫЛКА!»
exceltable.com
ЕСЛИ значение в ячейке