Мой блог
Функция SCAN в Excel: почему она навсегда изменит ваши формулы
Если вы когда-либо создали нарастающий итог в таблицах Excel, то наверняка использовали классический метод с суммированием диапазона и протягиванием формулы вниз. Однако при изменении данных или росте таблицы такой подход начинает доставлять немало хлопот, требуя постоянной корректировки диапазонов.
Именно для решения подобных задач создана функция SCAN, способная кардинально изменить привычный подход к вычислениям. В этой статье я подробно разберу, как устроен этот инструмент, и покажу на практических примерах, почему после его освоения вы больше не вернетесь к устаревшим методам.

Что именно делает функция SCAN
Самый простой способ понять логику SCAN — представить ее как инструмент, который применяет пользовательский расчет к каждому элементу массива и возвращает все промежуточные результаты по ходу выполнения. Если звучит слишком абстрактно, давайте взглянем на реальный пример.

Допустим, у вас есть ежемесячные продажи в диапазоне ячеек от A2 до A8, и вам требуется получить накопительный итог. Раньше я вводил формулу `=SUM(A$2:A2)` в ячейку B2, а затем копировал ее вниз до B8. Это занимало несколько строк, и при добавлении новых строк приходилось пересчитывать диапазоны.


Теперь вместо этого можно записать всего одну формулу в ячейку B2:

=SCAN(0, A2:A8, LAMBDA(a, v, a + v))
При нажатии клавиши Enter таблица автоматически заполнит всю колонку результатами благодаря динамическому массиву. Вместо шести формул у вас появляется одна компактная инструкция.
Базовый синтаксис и логика работы
Чтобы уверенно применять оператор в своей практике, важно понимать его структуру. Базовый синтаксис выглядит следующим образом:
=SCAN([initial_value], array, LAMBDA(accumulator, value, body))
- Initial_value — ваша стартовая точка (для суммы обычно ставится 0, но это может быть любое число или текст в кавычках).
- Array — диапазон обрабатываемых данных или имя таблицы.
- LAMBDA — логика вычислений, состоящая из аккумулятора (a), текущего значения (v) и тела функции (body).
Инструмент последовательно проходит по диапазону, запоминает промежуточный итог и использует его на следующем шаге. В зависимости от задачи тело функции можно менять: использовать умножение (a * v), вычитание (a – v), объединение текста через амперсанд или условные конструкции вроде IF.
Как функция SCAN меняет подход к созданию формул
Переход на эту функцию меняет работу с таблицами сразу в трех направлениях. Во-первых, вы уходите от бесконечного копирования строк вниз к написанию одной динамической формулы. Во-вторых, простые расчеты превращаются в многошаговую логику с отслеживанием каждого промежуточного состояния. В-третьих, формула сама мгновенно подстраивается под удаление или добавление строк в массиве.
Рассмотрим три полезных сценария на примере таблицы, которая отслеживает ежедневные статусы и баллы проектов:
Расчет нарастающего максимума
Если вам нужно фиксировать наибольший балл, достигнутый на каждую конкретную дату, используется следующая конструкция:
=SCAN(0, B2:B9, LAMBDA(a, v, MAX(a, v)))
Здесь аккумулятор (a) постоянно удерживает самое большое число из всех встреченных ранее, сравнивая его с текущим значением (v) на каждом шаге.
Подсчет количества активных дней
Вместо сложения баллов можно вести подсчет выполнения определенного условия. Например, сколько раз статус проекта принимал значение «Active»:
=SCAN(0, C2:C9, LAMBDA(a, v, IF(v=”Active”, a + 1, a)))
При совпадении статуса к аккумулятору прибавляется единица, а в противном случае счетчик остается прежним.
Условное нарастающее произведение
Этот сложный пример объединяет умножение и логические проверки. Допустим, мы вычисляем накопленный результат баллов из столбца B, но только в те дни, когда статус равен «Active». Как только статус меняется на неактивный, подсчет сбрасывается к единице:
=SCAN(1, C2:C9, LAMBDA(a, v, IF(v=”Active”, a * INDEX(B:B, ROW(v)), 1)))
Подобные инструменты незаменимы в бизнес-расчетах — например, при начислении бонусов сотрудникам за соблюдение регламентов или в финансовых прогнозах, где каждый новый период зависит от предыдущих показателей.
