Iferror excel как пользоваться vba

Обновлено: 06.07.2024

Я надеюсь, что кто-то может мне помочь, пожалуйста? Я много гуглил и не могу понять, в чем проблема. Я только балуюсь vba, так что я, конечно, не эксперт .

Я пытаюсь автоматизировать некоторые вычисления в огромной электронной таблице на работе, и я думаю, что, возможно, упускаю что-то действительно глупое. По сути, один из расчетов представляет собой простое деление одной ячейки на другую. Когда он попадает в ошибку, я хочу, чтобы он возвращал 0. Вот код, который продолжает срабатывать:

Я получаю ошибку во время выполнения 6 Переполнение

4 ответа

Предупреждение: On error resume next пропустит ВСЕ случаи ошибок для остальной части кода, если On error goto 0 не присутствует. Также, если вы хотите поймать конкретную ошибку, вы можете использовать if error = 'number' then для соответствующей обработки. Application.worksheetfunction.iserror лучше использовать в Excel, чем в Excel VBA.

Что такое объявленный тип SumIfInt ? Если это Integer , его максимальное допустимое значение составляет 32 767, потому что Integer является 16-разрядным типом - и использование 16-разрядного целочисленного типа со знаком для представления номеров строк в рабочей таблице Excel - хороший способ добиться ошибки времени выполнения 6 «Переполнение».

Вместо этого используйте 32-битный целочисленный тип:

Если Sheets("Bridge").Range("D" & SumIfInt) очень маленькое значение, возможно, использование его в качестве знаменателя делает переполнение результата Integer , или, возможно, даже Long - в этом случае вам, вероятно, следует использовать < Вместо этого > тип с плавающей точкой.

Когда он попадает в ошибку, я хочу, чтобы он возвращал 0.

Лучший код не будет ошибкой вообще. Единственная ошибка, о которой вы должны беспокоиться, это «Деление на ноль» - фактически также «Несоответствие типов», если какая-либо из задействованных ячеек может содержать значение ошибки - в любом случае, добавление ошибки в ковер с On Error Resume Next ничего не показывает о том, как избежать этой ситуации в будущем.

Лучший код для обработки ошибок - это код, который избегает и в первую очередь вызывает ошибки, которых можно избежать.

Теперь используйте взамен известное значение divisor .

Примечание об управлении объектами: вы разыменовываете одну и ту же ссылку на объект несколько раз - это неэффективно.

Если Sheets("Bridge") существует во время компиляции в ThisWorkbook (рабочей книге, в которой выполняется код), то вам никогда необходимо разыменовать его таким образом - VBA создает объект глобальной области видимости переменная для каждого отдельного листа в книге - выберите его в Project Explorer (Ctrl + R) VBE, вызовите его Свойства (F4), затем установите его > к чему-то значимому, например BridgeSheet . Тогда вы можете сделать это:

Другой совет: чем больше вы запихиваете в одну инструкцию, тем сложнее становится отладка, потому что тем больше возможных ошибок.

Подумайте о том, чтобы перетащить значения invidividual, включенные в их собственные переменные, затем проверить их, затем выполнить деление, как только вы знаете сделаете, что не взорвется.

При программировании всегда лучше избегать ошибки, сначала проверяя ее возможность, а не вызывая ее, а затем устраняя. Проверьте, является ли ячейка пустой или нулевой перед выполнением вычисления:

On Error Resume Next в основном говорит: «Если вы столкнулись с ошибкой, просто игнорируйте ее». Это может вызвать всевозможные неожиданные проблемы и должно использоваться только в качестве крайней меры.

Также проверьте IsError в VBA.

Во-первых, старайтесь не создавать ошибок - обычно On Error следует использовать для обработки непредвиденных ошибок.
Это объясняется тем, что если после On Error Resume Next произошла подлинная ошибка, она будет проигнорирована, а ваша сумма будет равна 0.
Например, Если кто-то написал Пятьсот вместо 500 , вы просто получите 0 (далеко зарезервировано, но . на самом деле, не далеко выручил - никогда не оцениваю достаточно талантливого идиота).

Если Sheets("Bridge").Range("D" & SumIfInt) равен нулю или пуст, вы получите ошибку деления на 0.
Если все остальное правильно (без текста, все остальные цифры присутствуют), то это единственная цифра, которую вам нужно проверить:

Ошибки случаются. Вдвойне обидно, когда они случаются не по твоей вине. Так в Microsoft Excel, некоторые функции и формулы могут выдавать ошибки не потому, что вы накосячили при вводе, а из-за временного отсутствия данных или копирования формул "с запасом" на избыточные ячейки. Классический пример - ошибка деления на ноль при вычислении среднего:

Ошибка деления на ноль

Причем заметьте, что итоги в нашей таблице тоже уже не считаются - одна ошибка начинает порождать другие, передаваясь по цепочке от одной зависимой формулы к другой. Так что из-за одной ошибочной ячейки, в конце концов, может перестать работать весь расчет.

Для лечения подобных ситуаций в Microsoft Excel есть мегаполезная функция ЕСЛИОШИБКА (IFERROR), которая умеет проверять заданную формулу или ячейку и, в случае возникновения любой ошибки, выдавать вместо нее заданное значение: ноль, пустую текстовую строку "" или что-то еще.

Синтаксис функции следующий:

=ЕСЛИОШИБКА( Что_проверяем ; Что_выводить_вместо_ошибки )

Перехват ошибки функцией ЕСЛИОШИБКА IFERROR

Все красиво и ошибок больше нет.

Обратите внимание, что эта функция появилась только с 2007 версии Microsoft Excel. В более ранних версиях приходилось использовать функции ЕОШ (ISERROR) и ЕНД (ISNA) . Эти функции похожи на ЕСЛИОШИБКА, но они только проверяют наличие ошибок и не умеют заменять их на что-то еще. Поэтому приходилось использовать их обязательно в связке с функцией проверки ЕСЛИ (IF) , создавая вложенные конструкции типа:

Перехват ошибок в функциями ЕСЛИ и ЕОШ

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

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

Видеоурок

Что возвращает функция

Указанное вами значение, в случае если в ячейке есть ошибка.

Синтаксис

Аргументы функции

Дополнительная информация

Примеры использования функции IFERROR (ЕСЛИОШИБКА) в Excel

Пример 1. Заменяем ошибки в ячейке на пустые значения

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

IFERROR в Excel

Для того, чтобы убрать информацию об ошибке в ячейке используйте эту формулу:

IFERROR в Excel

В данном случае функция проверит, выдает ли формула в ячейке ошибку, и, при её наличии, выдаст пустой результат.

В качестве результата формулы, исправляющей ошибки, вы можете указать любой текст или значение, например, с помощью следующей формулы:

IFERROR в Excel

Если вы пользуетесь версией Excel 2003 или ниже, вы не найдете функцию IFERROR (ЕСЛИОШИБКА) . Вместо нее вы можете использовать обычную функцию IF или ISERROR.

Пример 2. Заменяем значения без данных при использовании функции VLOOKUP (ВПР) на “Не найдено”

На примере ниже, мы хотим с помощью функции VLOOKUP (ВПР) для выбранных студентов подставить данные из результатов экзамена.

IFERROR в Excel

На примере выше, в списке студентов с результатами экзамена нет данных по имени Иван, в результате, при использовании функции VLOOKUP (ВПР) , формула нам выдает ошибку.

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

IFERROR в Excel

Пример 3. Возвращаем значение “0” вместо ошибок формулы

IFERROR в Excel

Читайте также: