Введение: зачем считать выполнение плана в Excel и какие ошибки допускают 90% пользователей
Расчет выполнения плана в Microsoft Excel — одна из самых востребованных задач в бизнес-аналитике, финансовом контроле и управленческом учете. Казалось бы, что может быть проще: разделил фактические данные на плановые, умножил на 100% — и готово. Но на практике даже опытные пользователи сталкиваются с искаженными результатами, когда формулы выдают 105% выполнения при фактическом провале или, наоборот, показывают 80% там, где план перевыполнен втрое.
Проблема кроется в трех ключевых моментах: неправильном выборе формулы (например, использование простого деления вместо МИН/МАКС для учета перевыполнения), игнорировании нулевых значений в плановых показателях и неверной обработке отрицательных чисел. Например, если план по продажам был –100 тыс. руб. (убыток), а факт составил –50 тыс. руб., то классическая формула =Факт/План*100% покажет 50% выполнения, хотя на самом деле убыток сократился вдвое — это 100% улучшение относительно плана!
В этой статье мы разберем 5 способов расчета выполнения плана — от базового до продвинутого, — а также покажем, как визуализировать результаты с помощью условного форматирования и сводных таблиц. Вы научитесь:
- 📊 Вычислять процент выполнения с учетом перевыполнения и невыполнения плана
- 🔍 Избегать ошибок при работе с нулевыми и отрицательными значениями
- 📈 Строить динамические дашборды для мониторинга KPI
- ⚡ Автоматизировать расчеты с помощью Power Query и VBA
Способ 1: Базовая формула для положительных значений плана
Если ваши плановые и фактические показатели всегда положительные (например, объем продаж, количество клиентов, выручка), достаточно использовать простейшую формулу:
=Факт/План*100%
Где:
- 📌
Факт— ячейка с фактическим значением (например,B2) - 📌
План— ячейка с плановым значением (например,C2)
Пример: если план по продажам на месяц — 500 единиц товара (C2=500), а фактически продано 450 единиц (B2=450), формула вернет 90% (недовыполнение на 10%).
⚠️ Внимание: Эта формула не работает, если план равен нулю (#ДЕЛ/0!) или если фактические данные превышают план более чем в 2 раза (например, при плане 100 и факте 300 формула покажет 300%, что может вводить в заблуждение).
| Факт (B2) | План (C2) | Формула | Результат | Интерпретация |
|---|---|---|---|---|
| 450 | 500 | =B2/C2 |
90% | Невыполнение на 10% |
| 500 | 500 | =B2/C2 |
100% | План выполнен ровно |
| 600 | 500 | =B2/C2 |
120% | Перевыполнение на 20% |
Способ 2: Учет перевыполнения и невыполнения (формула с МИН/МАКС)
Если вам нужно ограничить максимальное значение выполнения плана (например, чтобы при перевыполнении показывалось не 150%, а ровно 100%), используйте комбинацию функций МИН и МАКС:
=МИН(Факт/План; 1)
Эта формула вернет:
- 🔹 1 (100%), если факт ≥ плана (даже если перевыполнение в 10 раз)
- 🔹 Факт/План, если факт < плана (например, 0.8 для 80% выполнения)
Для обратной логики (когда важно зафиксировать минимальное выполнение, например, при контроле убытков), используйте:
=МАКС(Факт/План; 1)
Пример: если план по сокращению издержек — 100 тыс. руб., а факт составил 80 тыс. руб., формула =МАКС(80/100; 1) вернет 1 (100%), так как цель достигнута. Если же факт составил 120 тыс. руб., результат будет 1.2 (120%), сигнализируя о превышении лимита.
1. Убедитесь, что плановые значения не равны нулю
2. Проверьте формат ячейки (должен быть "Процентный" или "Общий")
3. Тестируйте формулу на крайних значениях (факт = 0, факт >> плана)
4. Используйте условное форматирование для визуализации отклонений-->
Способ 3: Работа с нулевыми и отрицательными значениями
Ошибка #ДЕЛ/0! возникает, когда план равен нулю. Чтобы избежать сбоя, добавьте проверку с помощью функции ЕСЛИОШИБКА:
=ЕСЛИОШИБКА(Факт/План; 0)
Но этот подход не идеален: если план нулевой, а факт ненулевой, формула вернет 0%, что некорректно. Лучше использовать:
=ЕСЛИ(План=0; ЕСЛИ(Факт=0; 1; 0); Факт/План)
Логика:
- 🔸 Если план = 0 и факт = 0 → 100% (цель "не ухудшить" достигнута)
- 🔸 Если план = 0, но факт ≠ 0 → 0% (план не выполнен, так как любое ненулевое значение противоречит нулевому плану)
- 🔸 Во всех остальных случаях → стандартный расчет
Факт/План
Для работы с отрицательными значениями (например, плановые убытки) используйте формулу:
=ЕСЛИ(План<0; Факт/План; ЕСЛИ(План=0; ЕСЛИ(Факт=0; 1; 0); Факт/План))
⚠️ Внимание: При отрицательных плановых значениях интерпретация результата инвертируется. Например, если план –100 (убыток), а факт –50, то выполнение составит 50%, но это означает, что убыток сократился на 50% — то есть цель выполнена лучше, чем на 100%!Как интерпретировать отрицательные планы?
При плановом убытке (–100) и фактическом убытке (–80):
- Формула вернет 80% (–80/–100), но реальное улучшение — 20% (убыток сократился на 20 единиц).
- Чтобы получить "истинный" процент выполнения, используйте формулу:
=ЕСЛИ(План<0; (План-Факт)/АБС(План); Факт/План)Для примера выше: (–100 – (–80))/100 = 20% улучшения.
Способ 4: Динамический расчет с условным форматированием
Чтобы визуально выделять выполнение плана, добавьте условное форматирование:
- Выделите диапазон с результатами (например,
D2:D100).- Перейдите на вкладку
Главная → Условное форматирование → Создать правило.- Выберите
Форматировать только ячейки, которые содержат.- Задайте условия:
- 🟢 Зеленый для значений ≥ 1 (план выполнен)
- 🟡 Желтый для значений от 0.8 до 0.99 (близко к плану)
- 🔴 Красный для значений < 0.8 (значительное невыполнение)
Для более гибкой настройки используйте формулы в правилах. Например, чтобы выделить ячейки, где факт превышает план на 20%:
=И($B2/$C2>=1,2; $C2<>0)Совместите это с гистограммами в ячейках (вкладка
Условное форматирование → Гистограммы), чтобы создать интерактивную панель мониторинга:Способ 5: Автоматизация расчетов с Power Query и VBA
Если вам нужно рассчитывать выполнение плана для тысяч строк или объединять данные из нескольких источников, используйте Power Query:
- Импортируйте данные в Power Query (
Данные → Получить данные → Из таблицы/диапазона).- Добавьте пользовательский столбец с формулой:
= [Факт] / [План](замените
[Факт]и[План]на названия ваших столбцов).- Замените ошибки (#DIV/0!) на 0 или "N/A" с помощью
Table.ReplaceErrorValues.- Загрузите данные обратно в Excel.
Для периодических отчетов создайте макрос на VBA:
Sub CalculatePlanExecution()Dim ws As Worksheet
Set ws = ThisWorkbook.Sheets("Отчет")
Dim lastRow As Long
lastRow = ws.Cells(ws.Rows.Count, "B").End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 3).Value <> 0 Then
ws.Cells(i, 4).Value = ws.Cells(i, 2).Value / ws.Cells(i, 3).Value
ws.Cells(i, 4).NumberFormat = "0.0%"
Else
ws.Cells(i, 4).Value = "N/A"
End If
Next i
End Sub
Этот макрос:
- 🖥️ Проходит по всем строкам листа
"Отчет"(начиная со 2-й)- 🔢 Рассчитывает выполнение плана для столбцов
B(факт) иC(план)- 📝 Записывает результат в столбец
Dс форматом процентов- ⚠️ Пропускает строки, где план равен нулю (пишет "N/A")
Типовые ошибки и как их избежать
Даже опытные пользователи Excel допускают ошибки при расчете выполнения плана. Вот самые распространенные:
Ошибка Причина Как исправить #ДЕЛ/0! Деление на ноль (план = 0) Используйте ЕСЛИ(План=0; 0; Факт/План)150% при плане 100 и факте 150 Формула не ограничивает максимальное значение Примените МИН(Факт/План; 1)Отрицательный процент (например, –200%) План и факт имеют разные знаки Добавьте проверку: =ЕСЛИ(План*Факт<0; "Ошибка"; Факт/План)Некорректное округление (например, 99.999% отображается как 100%) Формат ячейки с недостаточным количеством знаков после запятой Установите формат "Процентный" с 2-мя десятичными знаками Еще одна распространенная проблема — неверная интерпретация результатов. Например, если план по сокращению дебиторской задолженности был 100 тыс. руб., а факт составил 50 тыс. руб., то:
- 🔴 Ошибка: "Выполнение плана — 50%" (кажется, что цель не достигнута)
- 🟢 Правильно: "Задолженность сокращена на 50 тыс. руб. — план перевыполнен на 100%" (так как цель была уменьшить задолженность).
⚠️ Внимание: Всегда уточняйте, что означает "выполнение плана" в вашем контексте:- Для роста (продажи, доходы) → факт должен быть ≥ плана.
- Для сокращения (издержки, убытки) → факт должен быть ≤ плана (или ≤ по модулю для отрицательных значений).
FAQ: Ответы на частые вопросы
Как рассчитать выполнение плана, если план менялся в течение периода?
Используйте взвешенное среднее или рассчитывайте выполнение для каждого подпериода отдельно. Например, если план на январь был 100 единиц, а с февраля увеличен до 150, создайте дополнительный столбец с "скорректированным планом" и используйте формулу:
=СУММПРОИЗВ(Факт_по_месяцам; План_по_месяцам)/СУММ(План_по_месяцам)Можно ли рассчитать выполнение плана для нечисловых данных (например, дат)?
Да, если преобразовать данные в числовой формат. Например, для плана по срокам выполнения задач:
=ЕСЛИ(Факт_дата<=План_дата; 1; План_дата/Факт_дата)Где
Факт_датаиПлан_дата— это ячейки с датами в формате Excel (например,45000для 01.01.2023). Формула вернет:
- 100% — если задача выполнена в срок
- <100% — если просрочка (например, 0.5 для двукратной просрочки)
Как посчитать выполнение плана в Excel Online или Google Sheets?
Формулы работают аналогично, но в Google Sheets есть нюансы:
- 📌 Для условного форматирования используйте
Custom formula is(например,=B2/C2>=1)- 📌 Функция
ЕСЛИОШИБКАназываетсяIFERROR- 📌 Для Power Query используйте
Data → Data cleanup → Power ToolsПример формулы для Google Sheets:
=IFERROR(B2/C2, 0)Как визуализировать выполнение плана на графике?
Создайте комбинированную диаграмму:
- Выделите данные (план и факт).
- Вставьте
Вставка → Гистограмма с группировкой.- Щелкните правой кнопкой по ряду "План" и выберите
Изменить тип диаграммы для ряда → Линия.- Добавьте вторичную ось для линии (план).
В результате план будет отображаться линией, а факт — столбцами, что наглядно покажет отклонения.
Можно ли автоматически отправлять отчет по выполнению плана по email?
Да, с помощью VBA и Outlook. Пример кода для отправки отчета:
Sub SendPlanReport()Dim OutApp As Object, OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "email@example.com"
.Subject = "Отчет по выполнению плана на " & Format(Date, "dd.mm.yyyy")
.Body = "Добрый день!" & vbCrLf & vbCrLf & _
"Выполнение плана за текущий период: " & _
Worksheets("Отчет").Range("D2").Value * 100 & "%"
.Attachments.Add ThisWorkbook.FullName
.Send 'или .Display для проверки перед отправкой
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
⚠️ Перед использованием настройте Outlook и проверьте параметры безопасности макросов.