понедельник, 4 июля 2016 г.

Функция IFERROR в LibreOffice Calc. Что это и зачем это нужно

Функция IFERROR является одним из обработчиков внутренних ошибок электронных таблиц при расчётах в LibreOffice Calc. Что это значит? Это значит, что, если в ячейке в результате расчёта получается какая-либо внутренняя ошибка Calc (типа "Деление на ноль"), то функция IFERROR обработает такое событие и в ячейку запишет не код ошибки, который мешает производить дальнейшие действия с этой ячейкой, а заданное пользователем значение, будь то число или текст. Это очень удобно в том случае, если у Вас есть большая таблица, в которой исходные данные задаются последовательно и Вы, как пользователь, заранее уверены или можете предположить, что в некоторых ячейках обязательно будут ошибки (из-за того же деления на ноль), которые будут мешать обрабатывать результаты вычислений в целом по таблице. Приведу пример.
На рисунке ниже приведена абсолютно обычная табличка, в которой считается средняя цена одной единицы продукции на основе имеющихся данных о сумме выручки и количестве товара:

Цена за единицу в ячейке Е2 рассчитывается по простой формуле =ROUND(C2/D2;2) (функция ROUND округляет значение в ячейке до заданного пользователем числа знаков после десятичной запятой). Соответственно в ячейках Е3, Е4, Е5 и Е6 в формулах меняются ссылки на исходные данные  построчно. Средняя цена (ячейка Е8) считается, как =AVERAGE (E2:E6). Всё хорошо, если все данные в таблице есть и они корректные (то есть число, а не текст, там, где должно быть число, и вообще в ячейках столбца "Количество" есть данные).
Что же будет, если данных не хватает:
Итак, мы видим ошибку типа "Деление на ноль", которая тянет за собой и ошибку в итоговой цифре "Средняя цена", ради которой всё и затевалось. Как вариант, при отсутствии данных, можно просто удалить строку с компанией "Абхазия-4". Однако, если она в дальнейшем опять понадобиться или данные по сумме от этой компании требуются где-то ещё в расчётах, то удалять строку нельзя. Вот тут и пригодится функция IFERROR:
Что мы сделали: в ячейках Е2...Е6, столбца "Цена за единицу", мы добавили в формулу расчета цены обработчик ошибок IFERROR. Получилась формула =IFERROR(ROUND(C2/D2;2);"нет данных") вот такая. В случае, если при вычислении получается ошибка, то функция отображает простой текст "нет данных", который, с одной стороны, является подсказкой для пользователя, что чего-то не хватает, а с другой стороны не мешает функции AVERAGE высчитывать среднее значение цены, потому что AVERAGE оперирует исключительно числами, а текстовые значения в расчёт не принимает. Поэтому в последнем примере средняя цена считается на основании данных от четырёх компаний, а не от пяти, и считается вполне корректно.
Обратите внимание, что функцию IFERROR можно было бы использовать и в ячейке, где считается средняя цена, то есть в Е8. Однако в этом случае её роль была бы исключительно уведомительной, в том плане, что вместо кода ошибки можно было бы указать пользователю, что он ввёл не все данные или ввёл их некорректно.

Комментариев нет:

Отправить комментарий