Обновить
0.6

Google Таблицы

Онлайн-инструмент для работы с таблицами от Google

Сначала показывать
Порог рейтинга

ARRAYFORMULA vs. MAP

В Google Sheets есть две функции, позволяющие производить операции над целыми массивами: ARRAYFORMULA и MAP.

Пусть в столбце A лежит цена товара, а в столбце B — скидка в процентах. Посчитаем финальную цену для всех товаров:

=ARRAYFORMULA(A2:A*(1-B2:B))

Как видно, ARRAYFORMULA позволяет обращаться с массивами как с одиночными ячейками, выполняя любые арифметические (и не только) действия. Под капотом формула работает построчно: сначала обрабатывает первые ячейки столбцов A и B, потом вторые, и т.д. Всего одной формулой мы посчитали финальные цены сразу для всех товаров. Минус такого подхода: когда формула разрастается, становится тяжело разобраться, какие действия с какими столбцами производятся.

Решим ту же задачу с помощью MAP:

=MAP(A2:A;B2:B;LAMBDA(price;discount;price*(1-discount)))

Функция принимает на вход неограниченное количество массивов (в нашем случае — два). Далее она последовательно берёт элементы этих массивов, передаёт в функцию LAMBDA под именами, указанными в первых аргументах (price и discount), и выполняет вычисление, переданное последним аргументом (price*(1-discount)). Благодаря явному именованию массивов формула читается понятнее.

Встречаются случаи, когда ARRAYFORMULA в принципе не работает. Например, когда внутри необходимо использовать другую формулу массива.

Пример: пусть для каждого значения из столбца A нужно отфильтровать и склеить через запятую значения из другой таблицы:

=ARRAYFORMULA(JOIN(", ";FILTER(D2:D;E2:E=A2:A)))

Формула не работает, т.к. FILTER получает вторым аргументом сравнение двух массивов и не понимает, что от него требуется.

MAP же успешно справляется с этой задачей, т.к. передаёт в лямбда-функцию конкретное значение, по которому можно отфильтровать другую таблицу:

=MAP(A2:A;LAMBDA(id;JOIN(", ";FILTER(D2:D;E2:E=id))))

Резюме: в простейших случаях ARRAYFORMULA компактнее, в сложных формулах MAP более понятное, а иногда и единственное решение.

Теги:
0
Комментарии0

Ссылка на массив переменной длины

Пусть в столбце A лежит массив переменной длины (например, результат работы FILTER или IMPORTRANGE в Google Sheets). В столбце B мы хотим написать формулу массива, например, удвоить все значения столбца A.

Можно применить формулу ко всему столбцу A:

=ARRAYFORMULA(2*A2:A)

Но так возникнут лишние нули там, где данные закончились. Вопрос, как применить формулу только к диапазону с данными, учитывая, что количество строк может в любой момент поменяться?

Есть такое решение:

=ARRAYFORMULA(2*OFFSET(A2;0;0;COUNTA(A2:A)))

  • Функция COUNTA считает количество непустых значений в столбце.

  • Функция OFFSET возвращает диапазон нужного размера, начиная с указанной ячейки.

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

Теги:
0
Комментарии0

Проверка на уникальность

Пусть есть список однотипных объектов: товаров, заказов или сотрудников. У каждого элемента есть идентификатор. Как предотвратить ситуацию, когда при заполнении таблицы кто-нибудь добавит элемент дважды? Другими словами, как гарантировать уникальность идентификаторов?

В sql для этого используется PRIMARY KEY или UNIQUE, в электронных таблицах встроенных инструментов нет. Как вариант, можно реализовать подсветку дубликатов с помощью условного форматирования и функции COUNTIF:

Формат → Условное форматирование
Применить к диапазону: A2:A
Правила форматирования → Ваша формула =AND(LEN(A2);COUNTIF(A$2:A;"="&A2)>1)
Цвет фона: красный

Как работает формула:

  • LEN(A2) проверяет, что ячейка заполнена;

  • COUNTIF(A$2:A;"="&A2) считает количество ячеек, совпадающих с текущей. Если оно больше одного, срабатывает условное форматирование.

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

Теги:
0
Комментарии0

Пустое значение

В большинстве случаев результатом вычисления формулы в электронной таблице является какое-то значение. Но иногда необходимо просто оставить ячейку пустой. В Google Sheets для этого достаточно передать в функцию пустой аргумент:

=IF(A1;A1*100;) — если другая ячейка заполнена, то произвести вычисление, в противном случае оставить ячейку пустой.

=XLOOKUP("needle";A:A;B:B;) — если needle найден в столбце A, вывести соответствующие значение из столбца B, в противном случае оставить ячейку пустой.

Точка с запятой перед закрывающей скобкой обязательна, без неё первая формула вернёт FALSE, вторая — #N/A.

Занятно, что в Excel это не работает. Там в принципе нельзя написать формулу, которая вернёт пустое значение. Приходится возвращать пустой текст (""):

=ЕСЛИ(A1;A1*100;"")

Но это полурешение, т.к. пустой текст не то же самое, что пустое значение. Например, навигация по таблице, позволяющая быстро перемещаться между блоками данных, «перепрыгивает» ячейки с пустым значением, но «спотыкается» о ячейки с пустым текстом.

Теги:
0
Комментарии0

Навигация по электронной таблице

Как быстро перейти в конец текущего столбца с данными?

Достаточно нажать Ctrl + ↓ (⌘ + ↓).

Ctrl + ↑ (⌘ + ↑) перемещает в начало текущего столбца.

Ctrl + → (⌘ + →) переносит в конец текущей строки, а Ctrl + ← (⌘ + ←) — в начало.

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

Забавно, что эти сочетания клавиш не описаны в официальной документации.

Теги:
+1
Комментарии2

Подсветка формул

В сложных электронных таблицах легко запутаться, где данные, а где формулы, т. к. выглядят они одинаково. Можно временно включить (и так же выключить) отображение формул вместо значений с помощью сочетания клавиш Ctrl + ~

Есть и более изящный подход: выделять ячейки с формулами цветом с помощью условного форматирования и функции ISFORMULA:

Формат → Условное форматирование
Применить к диапазону: A:Z
Правила форматирования → Ваша формула =ISFORMULA(A1)
Цвет текста: темно-серый (2)

Для правильной работы адрес в формуле =ISFORMULA(A1) должен соответствовать левой верхней ячейке указанного диапазона (в примере A:Z).

Как результат, все формулы на листе будут выводиться серым шрифтом.

Теги:
0
Комментарии0

Замена формул значениями

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

Правка → Специальная вставка → Только значения

Или, что гораздо быстрее, воспользоваться последовательными сочетаниями клавиш:

  • Ctrl + C / ⌘ + C (копировать ячейку)

  • Shift + Ctrl + V / Shift + ⌘ + V (вставить как значение)

Работает как с одиночными ячейками, так и с целыми диапазонами.

Теги:
0
Комментарии0

Вклад авторов