0Pricing
Excel Formulas Academy · Урок

Циклы с помощью MAP и REDUCE

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

«Циклы с помощью MAP и REDUCE» — бесплатный урок Excel Formulas Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Excel Formulas Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Excel Formulas Academy содержит 4 уроков всего.

Циклы без кода

Иногда нужно применить одно и то же вычисление к каждому значению диапазона или свести весь диапазон к одному числу. В программировании это называется циклом. В современных электронных таблицах MAP и REDUCE выполняют эту задачу с помощью LAMBDA.

  • MAP преобразует каждый элемент массива в новый элемент
  • REDUCE объединяет все элементы в один накапливаемый результат

Обе функции принимают LAMBDA, описывающую действие с каждым значением. Они доступны в Microsoft 365 и Google Таблицах.

Как работает MAP

MAP проходит по массиву и применяет LAMBDA к каждому элементу, создавая новый массив того же размера. Параметр LAMBDA по очереди получает один элемент.

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

=MAP(array, LAMBDA(value, calculation))

Первый пример с MAP

Предположим, в A2:A6 находятся пять цен, и Вы хотите увеличить каждую на 10 процентов. MAP одновременно применяет наценку ко всем значениям.

Параметр LAMBDA p по очереди представляет каждую цену. MAP возвращает пять результатов — по одному для каждой входной ячейки — и разливает их вниз по столбцу.

Не нужно перетаскивать маркер заполнения или копировать формулу. Одна формула обрабатывает весь диапазон.

=MAP(A2:A6, LAMBDA(p, p*1.1))

MAP с двумя массивами

MAP может параллельно проходить по двум массивам. В этом случае LAMBDA принимает два параметра — по одному из каждого массива, сопоставляя их по позициям.

Здесь мы умножаем количества из A2:A6 на цены из B2:B6, чтобы получить итоги по строкам. Параметр q сопоставляется с каждым количеством, а pr — с каждой ценой.

Оба массива должны быть одинакового размера, иначе возникнет ошибка.

=MAP(A2:A6, B2:B6, LAMBDA(q, pr, q*pr))

Как работает REDUCE

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

Функция принимает три составляющие: начальное значение аккумулятора, массив и LAMBDA с двумя параметрами — acc (текущая накопленная сумма) и value (текущий элемент). На каждом шаге LAMBDA возвращает новый аккумулятор.

=REDUCE(start, array, LAMBDA(acc, value, new_accumulator))

Первый пример с REDUCE

Давайте просуммируем диапазон с помощью REDUCE (да, SUM тоже это умеет, но здесь принцип работы виден нагляднее).

Мы начинаем с аккумулятора, равного 0. Для каждого значения в A2:A6 LAMBDA прибавляет его к acc. После последнего элемента в acc хранится итоговая сумма.

Если бы значения были равны 10, 20 и 30, аккумулятор последовательно принимал бы значения 0, 10, 30 и 60, завершив работу на 60.

=REDUCE(0, A2:A6, LAMBDA(acc, v, acc + v))

REDUCE для накопления произведения

Измените операцию — и REDUCE выполнит новую задачу. Чтобы перемножить все значения, начните с аккумулятора, равного 1, и умножайте его на каждом шаге.

Так вычисляется произведение, например полезное для расчёта коэффициентов сложного роста. Начальное значение важно: используйте 0 для сумм и 1 для произведений, поскольку это нейтральные начальные значения.

=REDUCE(1, A2:A6, LAMBDA(acc, v, acc * v))

Объединение MAP и REDUCE

В одной формуле можно преобразовать данные с помощью MAP, а затем обобщить результат с помощью REDUCE. Распространённая задача — суммировать квадраты значений диапазона.

Здесь MAP возводит каждое значение в квадрат, а затем REDUCE складывает их, начиная с 0. Результат MAP становится массивом, который обрабатывает REDUCE.

=REDUCE(0, MAP(A2:A6, LAMBDA(x, x^2)), LAMBDA(acc, v, acc + v))

MAP и REDUCE в Google Таблицах

Обе функции есть в Google Таблицах и используют тот же синтаксис. MAP применяет LAMBDA к каждому элементу, а REDUCE накапливает результат, используя начальное значение, массив и LAMBDA с двумя параметрами.

В Google Таблицах также есть похожие вспомогательные функции, например SCAN. Она похожа на REDUCE, но возвращает каждый промежуточный аккумулятор, а не только итоговый. В Excel SCAN тоже доступна.

=SCAN(0, A2:A6, LAMBDA(acc, v, acc + v))

Советы и подводные камни

Запомните несколько моментов:

  • В MAP LAMBDA должна возвращать одно значение для каждого элемента
  • В REDUCE LAMBDA всегда должна возвращать новый аккумулятор — не забывайте об этом
  • Выбирайте правильное начальное значение: 0 для сумм, 1 для произведений, пустую строку для объединения текста
  • Передаваемые вместе массивы должны иметь одинаковые размеры

Если сомневаетесь, сначала проверьте LAMBDA внутри формулы на одном значении.

Когда использовать каждую функцию

Выбирайте MAP, когда нужен результат для каждого входного значения, например при применении наценки или форматирования.

Выбирайте REDUCE, когда нужно объединить множество значений в одно, например получить пользовательский итог, объединить текст или найти максимум по собственной логике.

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

Быстрая проверка

Проверьте, насколько хорошо Вы поняли работу REDUCE.

Итоги: циклы с MAP и REDUCE

Вы научились проходить по массивам с помощью функций на основе LAMBDA.

  • MAP преобразует каждый элемент в новый и возвращает массив
  • REDUCE сворачивает массив в одно значение с помощью аккумулятора
  • Выбирайте разумное начальное значение: 0 для сумм и 1 для произведений
  • MAP может сопоставлять несколько массивов; объединяйте MAP и REDUCE для мощных сводных формул в одну строку
  • SCAN показывает каждый промежуточный шаг

Далее Вы сохраните LAMBDA как именованные функции для создания понятных многоразовых формул во всей книге.

=REDUCE(0, MAP(A2:A6, LAMBDA(x, x^2)), LAMBDA(acc, v, acc + v))

Часто задаваемые вопросы

Урок «Циклы с помощью MAP и REDUCE» бесплатный?

Да — полный текст урока «Циклы с помощью MAP и REDUCE» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Excel Formulas Academy, подпишись на CoddyKit PRO. Курс Excel Formulas Academy содержит 4 уроков всего.

Чему я научусь в уроке «Циклы с помощью MAP и REDUCE»?

Применяйте LAMBDA к массиву, чтобы преобразовывать или накапливать значения. Ты практикуешь Excel Formulas Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Excel Formulas Academy?

Предыдущий опыт не требуется. Excel Formulas Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Циклы с помощью MAP и REDUCE»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Excel Formulas Academy?

Да. Каждый урок Excel Formulas Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Именование шагов с помощью LET
  2. Определение пользовательских функций с помощью LAMBDA
  3. Циклы с помощью MAP и REDUCE
  4. Более понятные формулы с именованными LAMBDA
← Назад к Excel Formulas Academy