Что такое динамические массивы
В сентябре 2018 года Microsoft выпустила обновление, которое добавляет в Microsoft Excel совершенно новый инструменты: динамические массивы (Dynamic Arrays) и 7 новых функций для работы с ними. Эти вещи, без преувеличения, совершенно кардинальным образом меняет всю привычную технику работы с формулами и функциями и касаются, буквально, каждого пользователя.
Рассмотрим простой пример, чтобы объяснить суть.
Предположим, что у нас есть простая табличка с данными по городам-месяцам. Что будет если мы выделим любую пустую ячейку справа на листе и введем в нее формулу-ссылку не на одну ячейку, а сразу на диапазон?
Во всех прошлых версиях Excel после нажатия на Enter мы бы получили содержимое только одной первой ячейки B2. А как иначе?
Ну, или можно было бы завернуть этот диапазон в какую-нибудь аггрегирующую функцию типа =СУММ(B2:C4) и получить по нему общий итог.
Если бы нам потребовались операции посложнее примитивной суммы, например, извлечение уникальных значений или Топ-3, то пришлось бы вводить нашу формулу как формулу массива, используя сочетание клавиш Ctrl+Shift+Enter.
Теперь всё по-другому.
Теперь после ввода такой формулы мы можем просто нажать на Enter — и получить в результате сразу все значения, на которые мы ссылались:
Это не магия, а новые динамические массивы, которые теперь есть в Microsoft Excel. Добро пожаловать в новый мир
Особенности работы с динамическими массивами
Технически, весь наш динамический массив хранится в первой ячейке G4, заполняя своими данными необходимое количество ячеек вправо и вниз. Если выделить любую другую ячейку массива, то в строке формул ссылка будет неактивной, показывая, что мы находимся в одной из «дочерних» ячеек:
Попытка удалить одну или несколько «дочерних» ячеек ни к чему не приведёт — Excel тут же заново их вычислит и заполнит.
При этом ссылаться на эти «дочерние» ячейки в других формулах мы можем совершенно спокойно:
Если копировать первую ячейку массива (например из G4 в F8), то и и весь массив (его ссылки) сдвинется в том же направлении, как и в обычных формулах:
Если нам нужно переместить массив, то достаточно будет перенести (мышью или сочетанием Ctrl+X, Ctrl+V), опять же, только первую главную ячейку G4 — вслед за ней перенесется на новое место и заново развернётся весь наш массив.
Если вам нужно сослаться где-нибудь еще на листе на созданный динамический массив, то можно использовать спецсимвол # («решётка») после адреса его ведущей ячейки:
Например, теперь можно легко сделать выпадающий список в ячейке, который ссылается на созданный динамический массив:
Ошибки динамических массивов
Но что будет, если для развёртывания массива не будет достаточно пространства или на его пути окажутся ячейки уже занятые другими данными? Знакомьтесь с принципиально новым типом ошибок в Excel — #ПЕРЕНОС! (#SPILL!):
Как всегда, если щелкнуть мышью по значку с желтым ромбом и восклицательным знаком, то мы получим более подробное пояснение по источнику проблемы и сможем быстро найти мешающие ячейки:
Аналогичные ошибки будут возникать, если массив выходит за пределы листа или натыкается на объединенную ячейку. Если удалить препятствие, то всё тут же исправится на лету.
Динамические массивы и «умные» таблицы
Если динамический массив указывает на «умную» таблицу, созданную сочетанием клавиш Ctrl+T или с помощью Главная — Форматировать как таблицу (Home — Format as Table), то он также унаследует её главное качество — автоподстройку размеров.
При добавлении новых данных внизу или справа «умная» таблица и динамический диапазон тоже будут автоматически растягиваться:
При этом, однако, есть одно ограничение: мы не можем использовать ссылку на динамический диапазон в форумулах внутри «умной» таблицы:
Динамические массивы и другие функции Excel
Хорошо, скажете вы. Всё это интересно и забавно. Не нужно, как раньше, вручную протягивать формулу со ссылкой на первую ячейку исходного диапазона вниз и вправо и всё такое. И всё?
Не совсем.
Динамические массивы — это не просто еще один инструмент в Excel. Теперь они внедрены в самое сердце (или мозг) Microsoft Excel — его вычислительный движок. А это значит что и другие, привычные нам формулы и функции Excel теперь тоже поддерживают работу с динамическими массивами. Давайте разберём несколько примеров, чтобы вы осознали всю глубину произошедших изменений.
Транспонирование
Чтобы транспонировать диапазон (обменять местами строки и столбцы) в Microsoft Excel всегда имелась встроенная функция ТРАНСП (TRANSPOSE). Однако, чтобы её использовать, вы должны были сначала правильно выделить диапазон для результатов (например, если на входе был диапазон 5х3, то вы должны были обязательно выделить 3×5), потом ввести функцию и нажать сочетание Ctrl+Shift+Enter, т.к. она умела работать только в режиме формул массива.
Теперь можно просто выделить одну ячейку, ввести в нее эту же формулу и нажать на обычный Enter — динамический массив сделает всё сам:
Таблица умножения
Этот пример я обычно приводил, когда меня просили наглядно показать преимущества формул массива в Excel. Теперь чтобы посчитать всю таблицу Пифагора достаточно встать в первую ячейку B2, ввести туда формулу перемножающую два массива (вертикальный и горизонтальный набор чисел 1..10) и просто нажать на Enter:
Склейка и преобразование регистра
Массивы можно не только перемножать, но склеивать стандартным оператором & (амперсанд). Предположим, нам нужно сцпеить имя и фамилию из двух столбцов и поправить скачущий регистр в исходных данных. Делаем это одной короткой формулой, которая формирует весь массив, а потом применяем к нему функцию ПРОПНАЧ (PROPER), чтобы привести в порядок регистр:
Вывод Топ-3
Предположим, что у нас есть куча чисел, из которых нужно вывести три лучших результата, расположив их в порядке убывания. Теперь это делается одной формулой и, опять же, без всяких Ctrl+Shift+Enter как раньше:
Если захочется, чтобы результаты располагались не в столбец, а в строку, то достаточно заменить в этой формуле двоеточия (разделитель строк) на точку с запятой (разделитель элементов внутри одной строки). В англоязычной версии Excel роль этих разделителей играют точка с запятой и запятая, соответственно.
ВПР извлекающая сразу несколько столбцов
Функцей ВПР (VLOOKUP) теперь можно вытаскивать значения не из одного, а сразу из нескольких столбцов — достаточно указать их номера (в любом желаемом порядке) в виде массива в третьем аргументе функции:
Функция СМЕЩ (OFFSET) возвращающая динамический массив
Одной из самых интересных и полезных (после ВПР) функций для анализа данных является функция СМЕЩ (OFFSET), которой я посвятил в своё время целую главу в своей книжке и статью здесь. Сложность в понимании и освоении этой функции всегда была в том, что она возвращала в качестве результата массив (диапазон) данных, но увидеть его мы не могли, т.к. Excel до сих пор не умел работать с массивами «из коробки».
Сейчас эта проблема в прошлом. Посмотрите, как теперь с помощью одной формулы и динамического массива, возвращаемого СМЕЩ, можно извлечь все строки по заданному товару из любой отсортированной таблицы:
Давайте разберём её аргументы:
- А1 — стартовая ячейка (точка отсчёта)
- ПОИСКПОЗ(F2;A2:A30;0) — вычисление сдвига от стартовой ячейки вниз — до первой найденной капусты.
- 0 — сдвиг «окна» вправо относительно стартовой ячейки
- СЧЁТЕСЛИ(A2:A30;F2) — вычисление высоты возвращаемого «окна» — количества строк, где есть капуста.
- 4 — размер «окна» по горизонтали, т.е. выводим 4 столбца
Новые функции для динамических массивов
Помимо поддержки механизма динамических массивов в старых функциях, в Microsoft Excel были добавлены несколько совершенно новых функций, заточенных именно под работу с динамическими массивами. В частности, это:
- СОРТ (SORT) — сортирует входной диапазон и выдает динамический массив на выходе
- СОРТПО (SORTBY) — умеет сортировать один диапазон по значениям из другого
- ФИЛЬТР (FILTER) — извлекает из исходного диапазона строки, удовлетворяющие заданным условиям
- УНИК (UNIQUE) — извлекает из диапазона уникальные значения или убирает повторы
- СЛМАССИВ (RANDARRAY) — генерит массив случайных чисел заданного размера
- ПОСЛЕД (SEQUENCE) — формирует массив из последовательности чисел с заданным шагом
Подробнее про них — чуть позже. Они стоят отдельной статьи (и не одной) для вдумчивого изучения
Выводы
Если вы прочитали всё написанное выше, то, думаю, уже осознаёте масштаб изменений, которые произошли. Очень многие вещи в Excel теперь можно будет делать проще, легче и логичнее. Я, признаться, немного в шоке от того, сколько статей теперь придется корректировать здесь, на этом сайте и в моих книгах, но готов это сделать с легким сердцем.
Подбивая итоги, в плюсы динамических массивов можно записать следующее:
- Можно забыть про сочетание Ctrl+Shift+Enter. Теперь Excel не видит различий между «обычными формулами» и «формулами массива» и обрабатывает их одинаково.
- Про функцию СУММПРОИЗВ (SUMPRODUCT), которую раньше использовали для ввода формул массива без Ctrl+Shift+Enter тоже можно забыть — теперь достаточно просто СУММ и Enter.
- Умные таблицы и привычные функции (СУММ, ЕСЛИ, ВПР, СУММЕСЛИМН и т.д.) теперь тоже полностью или частично поддерживают динамические массивы.
- Есть обратная совместимость: если открыть книгу с динамическими массивами в старой версии Excel, то они превратятся в формулы массива (в фигурных скобках) и продолжат работать в «старом стиле».
Нашлось и некоторое количество минусов:
- Нельзя удалить отдельные строки, столбцы или ячейки из динамического массива, т.е. он живёт как единый объект.
- Нельзя сортировать динамический массив привычным образом через Данные — Сортировка (Data — Sort). Для этого есть теперь специальная функция СОРТ (SORT).
- Динамический диапазон нельзя превратить в умную таблицу (но можно сделать динамический диапазона на основе умной таблицы).
Само-собой, это еще не конец и, я уверен, Microsoft продолжит совершенствовать этот механизм в будущем.
Где скачать?
И, наконец, главный вопрос
Microsoft впервые анонсировало и показало превью динамических массивов в Excel еще в сентябре 2018 года на конференции Ignite. В последующие несколько месяцев происходило тщательное тестирование и обкатка новых возможностей сначала на кошках сотрудниках самой Microsoft, а потом на добровольцах-тестировщиках из круга Office Insiders. В этом году обновление, добавляющее динамические массивы стали постепенно раскатывать уже по обычным подписчикам Office 365. Я, например, получил его только в августе с моей подпиской Office 365 Pro Plus (Monthly Targeted).
Если в вашем Excel ещё нет динамических массивов, а поработать с ними очень хочется, то есть следующие варианты:
- Если у вас подписка Office 365, то можно просто продождать, пока до вас дойдет это обновление. Как быстро это случится — зависит от настройки частоты доставки обновлений для вашего Office (раз в год, раз в полгода, раз в месяц). Если у вас корпоративный ПК, то можно попросить вашего администратора настроить загрузку обновлений почаще.
- Можно записаться в ряды тех самых добровольцев-тестировщиков Office Insiders — тогда вы будете первым получать все новые возможности и функции (но есть шанс повышенной глючности в работе Excel, само-собой).
- Если у вас не подписка, а коробочная standalone-версия Excel, то придется ждать до выхода следующей версии Office и Excel в 2022 году, как минимум. Пользователи таких версий получают только обновления безопасности и исправления ошибок, а все новые «плюшки» теперь достаются только подписчикам Office 365. Sad but true
В любом случае, когда динамические массивы появятся в вашем Excel — после этой статьи вы будете к этому уже готовы
Ссылки по теме
- Что такое формулы массива и как их использовать в Excel
- Суммирование по окну (диапазону) с помощью функции СМЕЩ (OFFSET)
- 3 способа транспонировать таблицу в Excel
Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel 2019 Excel 2016 Excel для iPad Excel для iPhone Excel для планшетов с Android Excel для телефонов с Android Еще…Меньше
Формулы Excel, возвращающие набор значений, также известный как массив, возвращают эти значения в смежные ячейки. Это действие называется переносом.
Формулы, способные возвращать массивы переменного размера, называются формулами динамического массива. Формулы, которые в сейчас возвращают успешно переносимые массивы, можно назвать формулами перенесенного массива.
Ниже приведены несколько заметок, которые помогут вам в понимании и использовании формул такого типа.
Что означает перенос?
Примечание: Более старые формулы массива, известные как устаревшие формулы массива, всегда возвращают результат фиксированного размера — они всегда переносятся в одно и то же количество ячеек. Поведение при переносе, описанное в этом разделе, не применяется к устаревшим формулам массива.
Перенос означает, что формула привела к нескольким значениям, и эти значения были помещены в смежные ячейки. Например, =SORT(D2:D11;1,-1),, сортирующая массив в порядке убывания, возвращает соответствующий массив высотой 10 строк. Но вам нужно только ввести формулу в верхнюю левую ячейку или в данном случае F2, и она автоматически переместится в ячейку F11.
Ключевые моменты
-
При нажатии на ВВОД для подтверждения формулы Excel динамически изменит размер диапазона вывода и поместит результаты в каждую ячейку в этом диапазоне.
-
Если вы пишете формулу динамического массива для работы со списком данных, может быть удобно поместить его в таблицу Excel, а затем использоватьструктурированные ссылки для ссылки на данные. Это происходит потому, что структурированные ссылки автоматически корректируются при добавлении или удалении строк из таблицы.
-
Формулы перенесенного массива не поддерживаются в самих таблицах Excel, поэтому их следует размещать в сетке за пределами таблицы. Таблицы лучше всего подходят для хранения строк и столбцов независимых данных.
-
После ввода формулы перенесенного массива при выделении любой ячейки в области переноса Excel выделит рамкой границу диапазона. Граница исчезнет при выборе ячейки за пределами области.
-
Редактировать можно только первую ячейку в области переноса. При выборе другой ячейки в области переноса, формула будет видна в строке формул, но текст будет «фантомным» и недоступным для изменения. При необходимости обновить формулу, необходимо выбрать верхнюю левую ячейку в диапазоне массива, изменить ее по мере необходимости. При нажатии Enter Excel автоматически обновит остальную часть области переноса.
-
Перекрытие формул. Формулы массива нельзя ввести, если что-то блокирует выходной диапазон. и если это происходит, Excel возвращает ошибку #SPILL!, указывающую на наличие блокировки. Если удалить помеху, формула будет перенесена должным образом. В приведенном ниже примере выходной диапазон формулы перекрывает другой диапазон с данными и отображается с пунктирной рамкой, перекрывающей ячейки со значениями, указывающими, что он не может быть перенесен. Удалите блокирующие данные или скопируйте их в другое место, и формула перенесется, как и ожидалось.
-
Устаревшие формулы массива, введенные с помощью CTRL+SHIFT+ENTER (CSE), по-прежнему поддерживаются по соображениям обратной совместимости, но их больше нельзя использовать. Если хотите, вы можете преобразовать устаревшие формулы массива в формулы динамического массива, найдя первую ячейку в диапазоне массива, скопировав текст формулы, удалив весь диапазон устаревшего массива, а затем повторно введя формулу в верхней левой ячейке. Перед обновлением устаревших формул массива до динамических формул массива следует помнить о некоторых счетных различиях между ними.
-
Приложение Excel ограничило поддержку динамических массивов в операциях между книгами, и этот сценарий поддерживается, только если открыты обе книги. Если закрыть исходную книгу, все связанные формулы динамического массива вернут ошибку #ССЫЛКА! после обновления.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
См. также
Функция ФИЛЬТР
Функция СЛУЧМАССИВ
Функция ПОСЛЕДОВ
Функция СОРТ
Функция СОРТПО
Функция УНИК
Ошибки #ПЕРЕНОС! в Excel
Оператор неявного пересечения: @
Нужна дополнительная помощь?
The key benefit of Dynamic Arrays is the ability to work with multiple values at the same time in a formula. This is a big upgrade and welcome change. Dynamic Arrays solve some really hard problems in Excel, and will fundamentally change the way worksheets are designed. Once you see how they work, you’ll never want to go back.
Availability
Dynamic arrays and the new functions below are only available Excel 365 and Excel 2021. Excel 2019 and earlier do not offer dynamic array formulas. For convenience, I’ll use «Dynamic Excel» (Excel 365) and «Legacy Excel» (2019 or earlier) to differentiate versions below.
New functions
As part of the dynamic array update, Excel now includes 8 new functions which directly leverage dynamic arrays to solve problems that are traditionally hard to solve with conventional formulas. Click the links below for details and examples for each function:
Function | Purpose |
---|---|
FILTER | Filter data and return matching records |
RANDARRAY | Generate array of random numbers |
SEQUENCE | Generate array of sequential numbers |
SORT | Sort range by column |
SORTBY | Sort range by another range or array |
UNIQUE | Extract unique values from a list or range |
XLOOKUP | Modern replacement for VLOOKUP |
XMATCH | Modern replacement for the MATCH function |
Video: New dynamic array functions in Excel (about 3 minutes).
As of January 2023, many more new functions have now been released to take advantage of the dynamic array engine. The complete list of new functions is: ARRAYTOTEXT, BYCOL, BYROW, CHOOSECOLS, CHOOSEROWS, DROP, EXPAND, FILTER, HSTACK, ISOMITTED, LAMBDA, LET, MAKEARRAY, MAP, RANDARRAY, REDUCE, SCAN, SEQUENCE, SORT, SORTBY, STOCKHISTORY, TAKE, TEXTAFTER, TEXTBEFORE, TEXTSPLIT, TOCOL, TOROW, UNIQUE, VALUETOTEXT, VSTACK, WRAPCOLS, WRAPROWS, XLOOKUP, and XMATCH.
Example
Before we get into the details, let’s look at a simple example. Below we are using the new UNIQUE function to extract unique values from the range B5:B15, with a single formula entered in E5:
=UNIQUE(B5:B15) // return unique values in B5:B15
The result is a list of the five unique city names, which appear in E5:E9.
Like all formulas, UNIQUE will update automatically when data changes. Below, Vancouver has replaced Portland on row 11. The result from UNIQUE now includes Vancouver:
Spilling — one formula, many values
In Dynamic Excel, formulas that return multiple values will «spill» these values directly onto the worksheet. This will immediately be more logical to formula users. It is also a fully dynamic behavior – when source data changes, spilled results will immediately update.
The rectangle that encloses the values is called the «spill range». You will notice that the spill range has special highlighting. In the UNIQUE example above, the spill range is E5:E10.
When data changes, the spill range will expand or contract as needed. You might see new values added, or existing values disappear. In this way, a spill range is a new kind of dynamic range.
In Legacy Excel, by contrast, you can see multiple results returned by array formula in the formula bar if you use F9 to inspect the formula. However, unless the formula is entered as a multi-cell array formula, only one value will display on the worksheet. This behavior has always made array formulas difficult to understand. Spilling makes array formulas more intuitive.
Note: when spilling is blocked by other data, you’ll see a #SPILL error. Once you make room for the spill range, the formula will automatically spill.
Video: Spilling and the spill range
Spill range reference
To refer to a spill range, use a hash symbol (#) after the first cell in the range. For example, to reference the results from the UNIQUE function above use:
=E5# // reference UNIQUE results
This is the same as referencing the entire spill range, and you’ll see this syntax when you write a formula that refers to a complete spill range.
You can feed a spill range reference into other formulas directly. For example, to count the number of cities returned by UNIQUE, you can use:
=COUNTA(E5#) // count unique cities
When the spill range changes, the formula will reflect the latest data.
Massive simplification
The addition of new dynamic array formulas means certain formulas can be drastically simplified. Here are a few examples:
- Extract and list unique values (before | after)
- Count unique values (before | after)
- Filter and extract records (before | after)
- Extract partial matches (before | after)
The power of one
One of the most powerful benefits of the «one formula, many values» approach is less reliance on absolute or mixed references. As a dynamic array formula spills results onto the worksheet, references remain unchanged, but the formula generates correct results.
For example, below we use the FILTER function to extract records in group «A». In cell F5, a single formula is entered:
=FILTER(B5:D11,B5:B11="a") // references are relative
Notice both ranges are unlocked relative references, but the formula works perfectly.
This is a huge benefit for many users, because it makes the process of writing formulas so much simpler. For another good example, see the multiplication table below.
Chaining functions
Things get really interesting when you chain together more than one dynamic array function. Perhaps you want to sort the results returned by UNIQUE? Easy. Just wrap the SORT function around the UNIQUE function like this:
As before, when source data changes, new unique results automatically appear, nicely sorted.
Native behavior
It’s important to understand that dynamic array behavior is a native and deeply integrated. When any formula returns multiple results, these results will spill into multiple cells on the worksheet. This includes older functions not originally designed to work with dynamic arrays.
For example, in Legacy Excel, if we give the LEN function a range of text values, we’ll see a single result. In Dynamic Excel, if we give the LEN function a range of values, we’ll see multiple results. This screen below shows the old behavior on the left and the new behavior on the right:
This is a huge change that can affect all kinds of formulas. For instance, the VLOOKUP function is designed to fetch a single value from a table, using a column index. However, in Dynamic Excel, if we give VLOOKUP more than one column index using an array constant like this:
=VLOOKUP("jose",F7:H10,{1,2,3},0)
VLOOKUP will return multiple columns:
In other words, even though VLOOKUP was never designed to return multiple values, it can now do so, thanks to the new formula engine in Dynamic Excel.
All formulas
Finally, note that dynamic arrays work with all formulas not just functions. In the example below cell C5 contains a single formula:
=B5:B14*C4:L4
The result spills into a 10 by 10 range that includes 100 cells:
If the numbers in the ranges B5:B14 and C4:L4 where are themselves dynamic arrays (i.e. created with the SEQUENCE function), the spill reference operator can be used like this:
=B5#*C4# // returns same 10 x 10 array
Arrays go mainstream
With the rollout of dynamic arrays, the word «array» is going to pop up much more often. In fact, you may see «array» and «range» used almost interchangeably. You’ll see arrays in Excel enclosed in curly braces like this:
{1,2,3} // horizontal array
{1;2;3} // vertical array
Array is a programming term that refers to a list of items that appear in a particular order. The reason arrays come up so often in Excel formulas is that arrays can perfectly express the values in a range of cells.
Video: What is an array?
Array operations become important
Because Dynamic Excel formulas can easily work with multiple values, array operations will become more important. The term «array operation» refers to an expression that runs a logical test or math operation on an array. For example, the expression below tests if values in B5:B9 are equal to «ca»
=B5:B9="ca" // state = "ca"
because there are 5 cells in B5:B9, the result is 5 TRUE/FALSE values in an array:
{FALSE;TRUE;FALSE;TRUE;TRUE}
The array operation below checks for amounts greater than 100:
=C5:C9>100 // amounts > 100
The final array operation combines test A and test B in a single expression:
=(B5:B9="ca")*(C5:C9>100) // state = "ca" and amount > 100
Note: Excel automatically coerces the TRUE and FALSE values to 1 and 0 during the math operation.
To bring this back to dynamic array formulas in Excel, the example below demonstrates how we can use exactly the same array operation inside the FILTER function as the include argument:
FILTER returns the two records where state = «ca» and amount > 100.
For a demonstration, see: How to filter with two criteria (video).
New and old array formulas
In Dynamic Excel, there is no need to enter array formulas with control + shift + enter. When a formula is created, Excel checks if the formula might return multiple values. If so, it will automatically be saved as a dynamic array formula, but you will not see curly braces. The example below shows a typical array formula entered in Dynamic Excel:
If you open the same formula in Legacy Excel, you’ll see curly braces:
Going the other direction, when a «traditional» array formula is opened in Dynamic Excel, you will see the curly braces in the formula bar. For example, the screen below shows a simple array formula in Legacy Excel:
However, if you re-enter the formula with no changes, the curly braces are removed, and the formula returns the same result:
The bottom line is that array formulas entered with control + shift + enter (CSE) still work to maintain compatibility, but you shouldn’t need to enter array formulas with CSE in Dynamic Excel.
The @ character
With the introduction of dynamic arrays, you’re going to see the @ character appear more often in formulas. The @ character enables a behavior known as «implicit intersection». Implicit intersection is a logical process where many values are reduced to one value.
In Legacy Excel, implicit intersection is a silent behavior used (when necessary) to reduce multiple values to a single result in one cell. In Dynamic Excel, it is not typically needed, since multiple results can spill onto the worksheet. When it is needed, implicit intersection is invoked manually with the @ character.
When opening spreadsheets created in an older version of Excel, you may see the @ character added automatically to existing formulas that have the potential to return many values. In Legacy Excel, a formula that returns multiple values won’t spill on the worksheet. The @ character forces this same behavior in Dynamic Excel so that the formula behaves the same way and returns the same result as it did in the original Excel version.
In other words, the @ is added to prevent an older formula from spilling multiple results onto the worksheet. Depending on the formula, you may be able to remove the @ character and the behavior of the formula will not change.
Summary
- Dynamic Arrays will make certain formulas much easier to write.
- You can now filter matching data, sort, and extract unique values easily with formulas.
- Dynamic Array formulas can be chained (nested) to do things like filter and sort.
- Formulas that return more than one value will automatically spill.
- It is not necessary to use Ctrl+Shift+Enter to enter an array formula.
- Dynamic array formulas are only available in Excel 365.
Незаметно для меня Microsoft совершил прорыв, представив в сентябре 2018 новые возможности – динамические массивы. Ниже – перевод книги Bill Jelen. Excel Dynamic Arrays Straight to the Point. Книги серии Straight to the Point предназначены для глубокого освещения одного аспекта Excel.
Билл Джелен – основатель сайта MrExcel.com и автор множества книг о Excel. Сайт бесплатно отвечает на более чем 30 000 вопросов в год. В моем блоге представлены три книги Джелена:
- Сводные таблицы в Microsoft Excel 2013,
- Всё о ВПР: от первого применения до экспертного уровня,
- Гуру Excel расширяют горизонты: делайте невозможное с Microsoft Excel.
Скачать заметку в формате Word или pdf, примеры в формате Excel
Содержание
- Начало работы
- Функция СОРТ
- Функция СОРТПО
- Функция ФИЛЬТР
- Функция УНИК
- Комбинирование функций
- Функция ПОСЛЕД
- Функция СЛМАССИВ
- Почему формулы массива (Ctrl+Shift+Enter) такие жесткие: неявное пересечение
- Функция ПРОСМОТРX и динамические массивы
- Обычные функции, использующие динамические массивы
- Динамические массивы и функции кубов
Введение
Ранее многие люди пытались изучать формулы массива и потерпели неудачу. Майк Гирвин написал отличную книгу, чтобы объяснить, как работают формулы массива. Целые главы той книги здесь будут сведены к коротким предложениям, благодаря новым функциям.
О динамических массивах было объявлено 24 сентября 2018 года, но даже в MS Excel 2019 они пока не представлены. Динамические массивы доступны только в Office 365. Я думаю, что парадигма покупки бессрочной лицензии на Office каждые три или шесть лет устарела, и рекомендую переходить на подписку.
Как организована эта книга. В главе 1 вы узнаете о концепции формулы, распространяющейся на соседние ячейки. Вы увидите, как непустая ячейка может блокировать разлив массива, и как это исправить. Вы услышите о неявном пересечении и о том, как нотация @ может решить эту проблему. Главы 2–8 посвящены каждой из шести новых функций и их комбинациям. Глава 9 основана на превосходном видео Джо Макдэйда. Из этой главы вы узнаете термины, которые использует команда Excel Calc: Подъем, Трансляция, Попарный подъем, Усечение массива и Неявное пересечение. В главе 10 рассматриваются два способа, с помощью которых динамические массивы делают новую функцию ПРОСМОТРX более мощной. В 11-й – приведены 24 примера объединения динамических массивов с рядом обычных функций Excel. В 12-й главе показано, как динамические массивы могут работать с функциями кубов.
Оригинальные файлы с примерами можно загрузить с сайта автора. К каждой главе я приложу файл, адаптированный к настоящему переводу.
Глава 1. Начало работы
Формулы теперь могу разливаться
В этой главе рассматривается новая формула =A2:A20, ошибка #ПЕРЕНОС! и новый неявный оператор пересечения @.
Начнем с базовой формулы массива. Перейдите в ячейку Е3. Наберите =A2:C10. В более ранних версиях Excel вам пришлось бы включить этот диапазон в качестве аргумента какой-нибудь функции, или использовать формулу массива, одновременно нажав Ctrl+Shift+Enter.
Рис. 1. Формула указывает на диапазон ячеек
Теперь же достаточно нажать Enter. Excel возвращает значения в 27 ячеек, которые выбираются автоматически вправо и вниз. Посмотрите на формулу в строке формул… здесь нет фигурных скобок, а это значит, что никто не нажимал Ctrl+Shift+Enter.
Рис. 2. Одна формула вернула множество значений
Ячейка E4 содержит текст Central, и, хотя строка формул показывает формулу для этой ячейки, она отображается серым цветом. Давайте проверим с помощью VBA, что содержится в ячейках Е3 и Е4?
Рис. 3. VBA подтверждает, что в ячейке Е4 не формула
VBA показывает, что в ячейке Е3 – формула, а в Е4 – нет. Также в Excel можно ввести формулу =ЕФОРМУЛА(E4). Она вернет ЛОЖЬ. И еще одна проверка. Выберете диапазон D1:H20, и пройдите по меню Главная –> Найти и заменить –> Формулы. Будет выделена только ячейка E3.
Один из первых вопросов на YouTube в ответ на мои первые видео с динамическими массивами был: можно ли вы копировать и вставлять значения? Да! Выберите диапазон E3:G11, нажмите Ctrl+C, кликните правой кнопкой мыши на выбранную новую ячейку и выберите Специальная вставка –> Значения.
Что происходит, если формула не может пролиться?
Что произойдет, если ячейка, куда должен разлиться диапазон, будет занята?
Рис. 4. Как Excel справится с занятой ячейкой?
Excel вернет ошибку #ПЕРЕНОС! Excel сообщает, что не может вернуть массив целиком. Поэтому не вернет ни одного результата. Если выбрать контекстное меню слева от ячейки с ошибкой, можно выделить мешающие ячейки. Возможно, их получится перенести в другое место листа.
Рис. 5. Ошибка #ПЕРЕНОС! и ее контекстное меню
Как только вы очистите ячейки, мешающие размещению массива, он автоматически разольется.
Существует несколько типов ошибки #ПЕРЕНОС! Та, что выше, называется Диапазон для переноса данных не пустой. Другие ошибки:
- Неопределенный размер. Вы не можете использовать волатильные функции, например, СЛУЧМЕЖДУ(), в качестве аргумента функции ПОСЛЕДОВ().
- Выходит за пределы листа. Вы не можете ввести функцию =СОРТ(C:C) в ячейке E2.
- Табличная формула. Вы не можете использовать функции динамического массива внутри Таблицы.
- Не хватает памяти. Вам следует ссылаться на диапазон меньшего размера.
- Разлив в объединенные ячейки. Динамический массив не может разливаться в объединенную ячейку.
- Неопознанная ошибка. Excel не может распознать ошибку.
Если ваша формула указывает на Таблицу, динамический массив будет расширяться при добавлении новых строк в Таблицу
Рис. 6. Динамический массив «отслеживает» Таблицу
Сравните с рис. 2. Вы преобразовали диапазон А1:С19 в Таблицу (Ctrl+T). Формула в ячейке Е3 изменилась на =Таблица1. Теперь, если вы добавите еще одну строку в Таблицу (А11:С11), формула в ячейке Е3 не изменится, а динамический массив автоматически расширится еще одной строкой (Е12:G12).
Хотя формулы динамического массива могут указывать на Таблицу, в самой Таблице использовать формулы динамического массива нельзя.
Использование нового типа ссылок на массив: E3#
Как вы захотите сослаться на массив E3:G12, но не знаете, какого он размера, добавьте оператор разлитого диапазона (#) после ячейки, содержащей формулу массива.
Например, =E3 вернет East, =E3# вернет весь массив, формула которого хранится в E3. Неофициально это называется ссылочной нотацией массива. Такая нотация поддерживается только при ссылке внутри одной книги.
Что такое неявное пересечение
Если вы введете =@C2:C11 в любой ячейке в строках со 2 по 10, формула вернет значение из столбца С той строки, в которой вы ввели формулу. Знак @ известен как неявный оператор пересечения.
Рис. 7. Используйте нотацию @, когда вам нужно неявное пересечение.
Еще в начале этого года на глаза попался интересный пример Dashboard-а, подготовленного в Tableau. Ради интереса решил некоторые приёмы и оформление воспроизвести в Excel и сделал файл без «стероидов» – надстроек Power Query & Pivot, без которых последнее время не обходится практически ни один отчет. Ну и заодно чтобы проверить, получится ли воспроизвести функционал из оригинальной версии.
Оригинал в Tableau, советую обязательно посмотреть:
В итоге получился файл Excel, в котором используются сводные таблицы, срезы и многое другое. А также самые новые подходы и формулы, которые добавлены, чтобы вам было интереснее.
Отдельно хочу обратить внимание на формулы динамических массивов. Этот функционал разработчики относительно недавно добавили в Excel 365 и 2021 (у новизны есть побочный эффект: если файл не будет работать и выдаст ошибку, например, ИМЯ, вам придется обновить версию Excel). Но, как показывает опыт, у многих аналитиков версия Excel всегда самая свежая. Поэтому скачивайте, смотрите и разбирайте формулы 🙂
Динамические массивы
доступно в Excel 365 и Excel 2021
Относительно недавно разработчики добавили в Excel новый функционал – формулы и ссылки для динамических массивов. И заодно создали новую концепцию, которая, как нам кажется, повлияет на многие будущие подходы к построению таблиц и работе с ними. Чтобы объяснить, как работают динамические массивы, начнём с формул, которые их создают. Например, с формулы УНИК.
Формула УНИК извлекает уникальные значения из диапазона.
Формула вводится в одну ячейку и создает столбец, ячейки которого рассчитываются автоматически.
У созданного динамического spill-массива* нет фиксированного размера – столбец автоматически меняется при добавлении новых значений в таблицу с исходными данными.
Динамические массивы подсвечиваются синей рамкой при их выделении мышкой.
Ссылки для динамических массивов
Кто говорил, что типы ссылок в Excel – абсолютные и относительные – тема для новичков и все её знают? Разбираем новый функционал ссылок для динамических массивов. Заодно можно поностальгировать и вспомнить, когда вы впервые познакомились с темой про типы ссылок в Excel =)
Если в файле есть динамический массив или диапазон в фигурных скобках { }, то на него можно сделать ссылку.
В конце такой ссылки должен быть значок # – решетка.
В целом, у ссылок на динамические массивы логика очень похожа на ссылки диапазонов, которые записываются в фигурных скобках { } с нажатием Ctrl+Shift+Enter. Но, в отличие от диапазонов, ссылку на массив записывают только в одну ячейку, а ещё массивы умеют сами автоматически «протягиваться».
Диапазон
{ = A1:A3 }
Динамический массив
= A1#
Динамические массивы и обычные формулы
Ссылки на динамические массивы можно применять так же, как обычные, добавлять значки $. И применять в вычислениях с «обычными» формулами. Ниже несколько примеров применения таких ссылок с формулами ранжирования, транспонирования, подсчета значений. Проверка вводимых значений тоже становится проще и быстрее.
Ранжирование
= РАНГ.РВ( A2#; A2# )
Подсчёт количества непустых ячеек
= СЧЁТЗ( A2# )
Транспонирование
=ТРАНСП( A1# )
Выпадающие списки
в меню Данные → Проверка данных
Формулы для динамических массивов
доступно в Excel 365 и Excel 2021
На сегодняшний день в Excel существует восемь формул для динамических массивов. Первоначально в этот список не входили ПРОСМОТРX и ПОИСКПОЗX. Формула Let также «заточена» для работы с массивами. И ещё там можно использовать оператор неявного пересечения @ (обязательно почитайте, что это такое). При обращении к массивам может появиться новый вид ошибки — #ПЕРЕНОС! или #SPILL!
Формула | Для чего нужна |
УНИК | Извлекает список уникальных значений |
ФИЛЬТР | Фильтрация по заданным условиям |
СОРТ | Сортировка по столбцу (строке) |
СОРТПО | Сортирует по данным в другом массиве |
СЛМАССИВ | Генерация массива случайных чисел |
ПОСЛЕД | Генерация массива последовательных чисел |
ПРОСМОТРX | Современный аналог ВПР |
ПОИСКПОЗX | Современный аналог ПОИСКПОЗ |
Похоже, что в будущем динамические массивы будут всё чаще применяться в Excel. Нам с коллегами они показались классными – формула вводится только в одну ячейку, ничего не надо «протягивать», потому что массив обновляется сам, даже кнопку «Обновить» не надо нажимать. На этот раз разработчики хорошо позаботились о пользователях 😉
24 сентября 2018 года Microsoft представила одно из самых существенных изменений в Excel за последнее десятилетие — Dynamic Array Functions, если вообще не с момента выхода электронного процессора. Революционность изменений косвенно подтверждается и периодом предварительного тестирования, по состоянию на конец лета 2019 года, воспользоваться нововведением могут только участники программы Office Insider.
Dynamic Array Functions (DAF) или в переводе функции динамических массивов. На первый взгляд может показаться, что достаточно тривиальное нововведение — 7 дополнительных функций (5 из группы «Ссылки и массивы» и 2 из группы «Математические»):
- ФИЛЬТР (FILTER)
- УНИК (UNIQUE)
- ОДНОЗНАЧ (SINGLE)
- СОРТ (SORT)
- СОРТПО (SORTBY)
- СЛУЧМАССИВ (RANDARRAY)
- ПОСЛЕДОВ (SEQUENCE)
Также табличный процессор пополнился дополнительной ошибкой #ПЕРЕНОС! или #SPILL! в англоязычной версии программы.
В чем же революционность обновления?
Дело в том, что для работы новых функций пришлось изменить принцип функционирования Excel. До появления Функций динамических массивов (DAF) пользователь по сути не мог в одной ячейке ссылаться на диапазон ячеек. Вернее ссылаться мог, но, скажем так, такие ссылки работали в очень ограниченных случаях:
- в специальных функциях, например, можно посчитать сумму, в таком случае в качестве аргумента функции будет передаваться ссылка на диапазон;
- некоторые функции и формулы, которые работали как формулы массива (т.е. с применением нажатия Ctrl + Shift + Enter );
- можно сослаться на диапазон в одной ячейке и, если данная ячейка находиться в строке, которая является частью диапазона, то будет возвращено одно значение из диапазона.
Если очень просто объяснять, то суть нововведения можно изобразить одной картинкой:
Да введения DAF, Excel не мог расширять возвращаемый диапазон на несколько ячеек. Опытный пользователь подметит «А как же формулы массива, введенные через сочетание Ctrl + Shift + Enter ?». Это не динамические массивы, т.к. область возвращаемого диапазона должна быть заранее очерчена пользователем.
Однако, справедливости ради следует отметить, что с формул массива все и началось, просто это эволюционировало в DAF, о чем косвенно можно судить из сообщений Microsoft, что формулы массива будут оставлены в Excel для совместимости.
На рисунке выше, представлен вариант из третьего пункта, поскольку ячейка с формулой находится на одной строке с массивом, на который ссылается, то возвращается значение из диапазона, если бы строки введенной формулы и исходного массива не пересеклись, мы бы получили сообщение об ошибке #ЗНАЧ!. Такая возможность называется пересечением и интересный факт, по сути 99% пользователей не использовали эту возможность, либо использовали не осознанно.
Слева ситуация с DAF, возвращается такой диапазон размерностью, на который мы сослались. В этом и заключается революционность нововведений — теперь Excel может самостоятельно расширять диапазон возвращаемого ответа.
Почему так долго тестируют?
Окей, ну ввели эти динамические массивы, добавили новые формулы, которые используют возможности DAF, в чем заминка с тестированием?
Дело в том, что динамические массивы фактически в корне меняют поход при построении формул в Excel. Изменения не только затрагивают работу всех функций, теперь можно передавать массив в формулу и забыть об автозаполнении, Excel все сделает сам.
А, поскольку, изменения коснулись автозаполнения, то использование различных типов ссылок тоже следует пересмотреть — а это, на минуточку, основа основ.
Кто сможет пользоваться?
Самое интересное — это для каких версий будет доступно следующее нововведение. После официального выхода DAF, возможности будут доступны подписчикам Office 365, если хотите раньше то можно подписаться на программу Office Insider и получить обновление уже сейчас. Сборки медленного круга достаточно стабильны. Ну а пользователи, которые приобрели Office 2019, не говоря уже о более ранних версиях, похоже не смогут воспользоваться динамическими массивами.