Коротко: Функция ЕСЛИ в Excel проверяет условие и возвращает одно из двух значений: =ЕСЛИ(условие; значение_если_истина; значение_если_ложь). Для нескольких условий их либо вкладывают друг в друга (вложенные ЕСЛИ), либо — что чище — используют ЕСЛИМН (IFS) начиная с Excel 2019 и 365. Как только ветвлений становится больше 4–5 или данных больше сотни тысяч строк, ту же логику разумнее писать через CASE WHEN в SQL — это ровно тот же приём, только читаемый и масштабируемый.
Разберу ЕСЛИ не на абстрактных «сдал/не сдал», а на реальных задачах аналитика: проставить флаг оттока, собрать грейды по выручке, сегментировать клиентов. И покажу, как эта же логика один в один переносится в SQL и pandas, когда таблица перестаёт помещаться в оперативку.
Как работает функция ЕСЛИ и из чего она состоит?
ЕСЛИ (в англоязычном Excel — IF) — это тернарный оператор: одно логическое условие и две ветки исхода. Синтаксис ровно из трёх аргументов:
=ЕСЛИ(лог_выражение; значение_если_истина; значение_если_ложь)
- лог_выражение — то, что даёт ИСТИНА или ЛОЖЬ. Обычно сравнение:
A2>1000,B2="Москва",C2<>0. - значение_если_истина — что вернуть, когда условие выполнилось.
- значение_если_ложь — что вернуть в противном случае.
Классическая задача аналитика — проставить бинарный флаг. Допустим, в столбце C лежит выручка клиента за месяц, и нам нужен признак «крупный клиент» с порогом 100 000:
=ЕСЛИ(C2>=100000; "крупный"; "мелкий")
Флаг можно делать и числовым — так удобнее потом суммировать и считать долю:
=ЕСЛИ(C2>=100000; 1; 0)
Если протянуть эту формулу по всему столбцу, а внизу поставить =СРЗНАЧ(D2:D1000), вы сразу получите долю крупных клиентов. Это микро-версия того, что в SQL делается через AVG(CASE WHEN ... THEN 1 ELSE 0 END). Логика ЕСЛИ — фундамент любой сегментации и любого расчёта среднего чека или доли, поэтому её стоит довести до автоматизма, прежде чем переходить к оконным функциям и SQL.
Третий аргумент можно опустить — тогда при ЛОЖЬ вернётся ЛОЖЬ (или 0 в числовом контексте). Но в аналитике лучше писать явно: пустая ветка потом путает при сборке сводных.
Как задать ЕСЛИ с несколькими условиями через И и ИЛИ?
Одно условие — это редкость. Обычно нужно проверить сразу несколько: «клиент из Москвы И выручка выше 100 тысяч». Для этого внутрь ЕСЛИ вкладывают функции И (AND) и ИЛИ (OR).
- И(усл1; усл2; ...) — ИСТИНА, только если выполнены ВСЕ условия.
- ИЛИ(усл1; усл2; ...) — ИСТИНА, если выполнено ХОТЯ БЫ ОДНО.
Пример: помечаем VIP-клиента — из столицы и с крупным чеком одновременно:
=ЕСЛИ(И(B2="Москва"; C2>=100000); "VIP"; "обычный")
Пример с ИЛИ: клиент считается «рисковым по оттоку», если он либо не заходил больше 30 дней, либо снизил активность до нуля:
=ЕСЛИ(ИЛИ(E2>30; F2=0); "риск оттока"; "активен")
И и ИЛИ комбинируются. Скажем, VIP — это (Москва ИЛИ Санкт-Петербург) И чек от 100 тысяч:
=ЕСЛИ(И(ИЛИ(B2="Москва"; B2="Санкт-Петербург"); C2>=100000); "VIP"; "обычный")
Здесь важна аккуратность со скобками: каждая функция открывает свою пару. Именно из-за скобок формулы с И/ИЛИ начинают ломаться — про типичные ошибки будет отдельный раздел ниже. Такой флаг оттока — это ровно то, что потом считают как метрику churn rate: доля клиентов с меткой «риск» к общей базе.
Почему вложенные ЕСЛИ превращаются в нечитаемую лапшу?
Когда исходов больше двух, одну ЕСЛИ вкладывают в ветку «ложь» другой. Задача: присвоить клиенту грейд по годовой выручке — A, B, C или D.
=ЕСЛИ(C2>=1000000; "A";
ЕСЛИ(C2>=500000; "B";
ЕСЛИ(C2>=100000; "C"; "D")))
Читается так: если выручка от миллиона — грейд A; иначе если от 500 тысяч — B; иначе если от 100 тысяч — C; во всех остальных случаях — D. Работает. Но у вложенных ЕСЛИ три системные проблемы:
- Порядок условий критичен. Проверки идут сверху вниз, и первое сработавшее условие «забирает» строку. Если поставить
C2>=100000первым, то клиент с выручкой 2 млн получит грейд C — потому что 2 млн тоже больше 100 тысяч. Границы нужно идти от крупного к мелкому (или наоборот, но строго монотонно). - Скобки в конце. Каждая вложенная ЕСЛИ добавляет закрывающую скобку. На семи уровнях у вас хвост из семи скобок, и одну легко потерять.
- Нечитаемость. Формула на 5–6 уровней — это одна строка на пол-экрана, в которой нельзя оставить комментарий и почти нельзя найти, где именно ошиблась граница.
Технически Excel разрешает до 64 уровней вложенности, но всё, что глубже 3–4, — это уже долговая яма. Логику невозможно проверить глазами, а через месяц вы сами не вспомните, почему граница именно 500000, а не 490000. Ровно эту боль решают ЕСЛИМН и, на бо́льших объёмах, CASE WHEN в SQL.
Чем ЕСЛИМН (IFS) удобнее вложенных ЕСЛИ?
ЕСЛИМН (в англоязычном Excel — IFS) появилась в Excel 2019 и есть в 365. Она принимает пары «условие; значение» подряд, без вложенности и без хвоста скобок. Тот же грейд:
=ЕСЛИМН(
C2>=1000000; "A";
C2>=500000; "B";
C2>=100000; "C";
ИСТИНА; "D")
Пары читаются как таблица: слева условие, справа результат. Последняя строка ИСТИНА; "D" — это ветка «во всех остальных случаях», аналог ELSE. Без неё, если ни одно условие не выполнилось, ЕСЛИМН вернёт ошибку #Н/Д, а не пустоту — это частая ловушка.
Сравним подходы напрямую:
| Критерий | Вложенные ЕСЛИ | ЕСЛИМН (IFS) |
|---|---|---|
| Читаемость 4+ веток | Низкая, лапша | Высокая, список пар |
| Закрывающие скобки | По одной на уровень | Одна на всю формулу |
| Ветка «иначе» | Последний аргумент | ИСТИНА; значение в конце |
| Версия Excel | Любая | 2019 / 365 |
| Проверка глазами | Тяжело | Легко |
Логика ЕСЛИМН — это уже почти дословный SQL. Каждая пара «условие; значение» соответствует одному WHEN ... THEN ..., а ИСТИНА; "D" — это ELSE 'D'. Если ваш Excel старый и ЕСЛИМН недоступна, есть третий путь — таблица порогов и ВПР. Про её механику и подводные камни я разбирал в гайде по ВПР и VLOOKUP: грейды кладут в справочник, а формула подтягивает нужный по диапазону.
Как собрать грейды и сегменты клиентов через ЕСЛИ?
Сегментация — самая частая продуктовая задача, где нужна логика ЕСЛИ. Возьмём упрощённый RFM: делим клиентов по давности последней покупки (Recency, дней) и сумме (Monetary, рублей). Данные:
| Клиент | Дней с покупки | Сумма, ₽ | Сегмент (ожидаем) |
|---|---|---|---|
| Иванов | 5 | 240 000 | Чемпион |
| Петров | 20 | 60 000 | Лояльный |
| Сидоров | 90 | 15 000 | Спящий |
| Козлов | 200 | 5 000 | Потерянный |
Формула сегмента через ЕСЛИМН (давность в B, сумма в C):
=ЕСЛИМН(
И(B2<=14; C2>=100000); "Чемпион";
И(B2<=30; C2>=30000); "Лояльный";
B2<=120; "Спящий";
ИСТИНА; "Потерянный")
Обратите внимание: первые две ветки — составные, через И, а порядок опять важен. Чемпион проверяется первым, иначе клиент с давностью 5 дней и суммой 240 тысяч провалился бы сразу в «Лояльный». Грейды сотрудников или скоринг заявок строятся точно так же — меняются только пороги и названия.
Когда сегментов и порогов становится много, поддерживать это в ячейках больно: любое изменение границы — это правка формулы во всём столбце. Промышленный вариант той же RFM-логики я показывал в разборе RFM-сегментации на SQL — там пороги считаются через NTILE и живут в одном месте. Логика идентична вашей формуле ЕСЛИМН, просто выражена в CASE WHEN и применяется ко всей базе одним запросом.
Какие типичные ошибки ломают формулу ЕСЛИ?
Собрал ошибки, которые встречаю у аналитиков чаще всего:
- Текст без кавычек.
=ЕСЛИ(C2>100; крупный; мелкий)вернёт#ИМЯ?, потому что Excel ищет именованный диапазонкрупный. Любой текстовый результат — в кавычках:"крупный". - Сравнение чисел, записанных как текст. Если выгрузка пришла из БД или CSV, числа могут быть текстом, и
C2>=100000даёт неверный результат — текст всегда «больше» числа. Лечится черезЗНАЧЕН(C2)или предварительное приведение типа. - Неверный порядок границ в лестнице. Разбирали выше: условия должны идти монотонно от строгого к мягкому. Иначе широкая граница перехватывает все строки.
- Забытая ветка «иначе» в ЕСЛИМН. Нет
ИСТИНА; значениев конце — получаете#Н/Дна строках, не попавших ни в одно условие. - Разделитель аргументов. В русской локали — точка с запятой (
;), в англоязычной — запятая (,). При переносе формулы между локалями всё рассыпается. - Логика И/ИЛИ наизнанку. «Не Москва и не Питер» — это
И(B2<>"Москва"; B2<>"Санкт-Петербург"), а неИЛИ. С отрицаниями И и ИЛИ меняются местами (закон де Моргана) — здесь ошибаются постоянно. - Плавающая точка в сравнении на равенство.
=ЕСЛИ(A2=0,3; ...)может не сработать, еслиA2получено вычислением: 0.1+0.2 в машинной арифметике не ровно 0.3. Для дробных сравнивайте через диапазон или ОКРУГЛ.
Эти же грабли, кстати, разбирают на собеседованиях — логика условий и приведение типов входят в стандартный набор вопросов для аналитика. Прогнать себя по ним можно на мок-интервью с AI или в банке вопросов по SQL.
Чем ЕСЛИ в Excel похож на CASE WHEN в SQL?
ЕСЛИ и CASE WHEN — это буквально один и тот же приём условной логики, только на разных движках. Возьмём наш грейд по выручке и запишем его в SQL:
SELECT
client_id,
revenue,
CASE
WHEN revenue >= 1000000 THEN 'A'
WHEN revenue >= 500000 THEN 'B'
WHEN revenue >= 100000 THEN 'C'
ELSE 'D'
END AS grade
FROM clients;
Сопоставьте построчно с формулой ЕСЛИМН из раздела про грейды — соответствие полное:
- каждый
WHEN ... THEN ...— это пара «условие; значение» в ЕСЛИМН; ELSE 'D'— этоИСТИНА; "D";- порядок
WHENтак же критичен: SQL берёт первое сработавшее условие сверху вниз, как и Excel.
Составные условия через И/ИЛИ переезжают в AND/OR один в один. Наш VIP-флаг:
SELECT
client_id,
CASE
WHEN city IN ('Москва', 'Санкт-Петербург') AND revenue >= 100000
THEN 'VIP'
ELSE 'обычный'
END AS segment
FROM clients;
А для доли крупных клиентов вместо «протянуть ЕСЛИ и взять СРЗНАЧ» пишется одна агрегатная строка:
SELECT
AVG(CASE WHEN revenue >= 100000 THEN 1.0 ELSE 0 END) AS share_large
FROM clients;
Тот же паттерн работает и в pandas — через numpy.select, который читается как ЕСЛИМН:
import numpy as np
conditions = [
df['revenue'] >= 1_000_000,
df['revenue'] >= 500_000,
df['revenue'] >= 100_000,
]
grades = ['A', 'B', 'C']
df['grade'] = np.select(conditions, grades, default='D')
Список conditions — это ваши WHEN, grades — THEN, а default='D' — ELSE. Освоив ЕСЛИ в Excel, вы уже понимаете условную логику во всех трёх инструментах. Разница только в синтаксисе, который добирается за пару часов в SQL-тренажёре или Python-тренажёре.
Когда пора уходить от формул Excel к SQL?
Excel с функцией ЕСЛИ отлично закрывает разовые задачи и прототипы логики. Но есть сигналы, что пора переносить расчёт в SQL или pandas:
- Объём. Excel начинает тормозить на сотнях тысяч строк, а на миллионе просто не откроет файл. SQL и pandas работают с такими объёмами штатно.
- Повторяемость. Если один и тот же сегментирующий расчёт нужен каждую неделю, формула в ячейках — это ручной труд и риск ошибки при копировании. SQL-запрос запускается по расписанию.
- Единый источник границ. В SQL пороги грейдов задаются один раз в CASE (или в справочной таблице) и применяются ко всей выборке. В Excel логика размазана по столбцу.
- Аудит и воспроизводимость. SQL-запрос можно прочитать, проверить, положить под версионирование в Git-хостинг. Формула в ячейке
AB2047— чёрный ящик. - Соединение источников. Как только к сегментации нужно подтянуть данные из второй таблицы, начинаются JOIN — а это уже родная территория SQL, а не ВПР.
Практический маршрут: если вы уверенно пишете ЕСЛИ, ЕСЛИМН и связки И/ИЛИ, вам осталось выучить CASE WHEN и базовый SELECT — и вы делаете то же самое, но на любых объёмах. Начать удобно с SQL с нуля, а закрепить условную логику — на реальных задачах.
Логика ЕСЛИ, которую вы уже знаете, — это и есть половина пути к SQL. В тренажёре первые 5 задач на CASE WHEN и сегментацию открыты бесплатно: перепишите свои грейды и флаги оттока на настоящем PostgreSQL прямо в браузере, без установки. Дальше, если зацепит, открывается полный банк из сотен задач по Pro. Это самый короткий способ превратить навык «умею ЕСЛИ в Excel» в строчку «SQL: уверенно» в резюме — а как оформить остальное, есть отдельный шаблон резюме аналитика.
Смежные материалы, чтобы закрепить тему:
- Сводные таблицы Excel для аналитика — следующий уровень после формул.
- Power Query для аналитика — обработка данных до того, как они попадут в ЕСЛИ.
- SQL или Python: что учить первым — куда двигаться дальше.
- Метрика churn rate — где ваш флаг оттока превращается в продуктовую метрику.