В рамках значительного обновления языка формул Excel в целях обеспечения поддержки динамических массивов был добавлен оператор неявного пересечения. Динамические массивы обеспечивают новые существенные вычислительные операции и функциональные возможности для Excel.
Обновленный язык формул
Обновленный язык формул Excel практически идентичен старому, за исключением того, что в нем используется оператор @, который указывает, в каких случаях может происходить неявное пересечение, тогда как в старом языке это никак не отображалось. В результате вы можете заметить, что символ @ появляется в некоторых формулах при открытии в Excel с динамическим массивом. Обратите внимание, что ваши формулы будут вычисляться так же, как и раньше.
Что такое неявное пересечение?
Логика неявного пересечения сводит множество значений к одному. Это было реализовано в Excel для того, чтобы формула возвращала одно значения, т.к. ячейка может содержать одно значение. Если ваша формула возвращала одно значение, значит неявное пересечение ничего не делало (хотя технически это происходило в фоновом режиме). Этот процесс описан ниже.
-
Если значением является один элемент, возвращается этот элемент.
-
Если значением является диапазон, возвращается значение из ячейки, находящейся в той же строке или столбце, что и формула.
-
Если значением является массив, выберите значение слева вверху.
С появлением динамических массивов Excel больше не ограничивается возвратом отдельных значений из формул, поэтому скрытое неявное пересечение больше не требуется. Если раньше формула могла незаметно выполнять неявное пересечение, то теперь динамические массивы позволяют Excel показывать неявное пересечение при помощи символа @ в соответствующем месте.
Почему выбран именно символ @?
Символ @ уже используется в ссылках на таблицы для обозначения неявного пересечения. Рассмотрим следующую формулу в таблице =[@Column1]. Здесь символ @ указывает, что в формуле должно применяться неявное пересечение для получения значения в той же строке из [Столбец1].
Можно ли удалить @?
Зачастую это возможно. Это зависит от того, что именно возвращает часть формулы справа от символа @:
-
Если она возвращает одно значение (наиболее распространенный случай), от удаления @ ничего не изменится.
-
Если она возвращает диапазон или массив, удаление символа @приведет к переносуего в соседние ячейки.
Если удалить автоматически добавленный символ @, после чего открыть книгу в более старой версии Excel, формула будет отображаться как устаревшая формула массива (заключенная в фигурные скобки {}); это делается для того, чтобы в старой версии не выполнилось неявное пересечение.
Когда @ добавляется в старые формулы?
Как правило, функции, которые возвращают диапазоны или массивы с несколькими ячейками, будут иметь префикс @, если они были созданы в более старой версии Excel. Важно отметить, что поведение формулы при этом не меняется — просто теперь вы можете увидеть ранее невидимое неявное пересечение. К распространенным функциям, которые могут возвращать диапазоны с несколькими ячейками, относятся функции ИНДЕКС, СМЕЩЕНИЕ и пользовательские функции (UDF). Распространенным исключением является случай, когда они заключены в функцию, которая принимает массив или диапазон (например, SUM() или AVERAGE()).
Дополнительные сведения см. в статье Функции Excel, возвращающие диапазоны или массивы.
Примеры
Исходная формула |
Как видно в динамическом массиве Excel |
Описание |
---|---|---|
=SUM(A1:A10) |
=SUM(A1:A10) |
Никаких изменений — неявное пересечение произойти не могло, поскольку функция SUM ожидает диапазоны или массивы. |
=A1+A2 |
=A1+A2 |
Никаких изменений — неявное пересечение произойти не могло. |
=A1:A10 |
=@A1:A10 |
Произойдет неявное пересечение, и Excel вернет значение, связанное со строкой, в которой находится формула. |
=INDEX(A1:A10,B1) |
=@INDEX(A1:A10,B1) |
Неявное пересечение возможно. Функция ИНДЕКС может возвращать массив или диапазон, если ее второй или третий аргумент равен 0. |
=OFFSET(A1:A2,1,1) |
=@OFFSET(A1:A2,1,1) |
Неявное пересечение возможно. Функция OFFSET может возвращать диапазон с несколькими ячейками. В этом случае может иметь место неявное пересечение. |
=MYUDF() |
=@MYUDF() |
Неявное пересечение возможно. Пользовательские функции могут возвращать массивы. В этом случае исходная формула вызвала бы неявное пересечение. |
Использование оператора @ в новых формулах
При создании или редактировании в Excel с функцией динамических массивов формулы с оператором @ она может отображаться как _xlfn. SINGLE() в версии Excel без динамических массивов.
Это происходит при выполнении смешанной формулы. Смешанная формула — это формула, которая основывается как на вычислении массива, так и на неявном пересечении. Такой возможности не было до появлении Excel с динамическими массивами. В версиях без динамических массивов поддерживались только формулы, в которых выполнялось неявное пересечение i) или вычисление массива ii).
Когда Excel с функцией динамических массивов обнаруживает создание «смешанной формулы», будет предложен вариант формулы с неявным пересечением. Например, если ввести =A1:A10+@A1:A10, отобразится следующее диалоговое окно:
Если вы отклоните формулу, предложенную в диалоговом окне, будет выполнена смешанная формула =A1:A10+@A1:A10. Если позже вы откроете эту формулу в версии Excel без функции динамических массивов, она будет отображаться как =A1:A10+_xlfn.SINGLE(A1:A10) с символами @в смешанной формуле, имеющей такой вид: _xlfn.SINGLE(). При вычислении этой формулы с помощью Excel без функции динамических массивов будет возвращено значение #NAME! значение ошибки #ЗНАЧ!.
Дополнительные сведения
Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.
См. также
Функция ФИЛЬТР
Функция СЛУЧМАССИВ
Функция ПОСЛЕДОВ
Функция СОРТ
Функция СОРТПО
Функция УНИК
Ошибки #ПЕРЕНОС! в Excel
Динамические массивы и поведение рассеянного массива
Неявное пересечение использовалось в Excel уже много лет, но мало кто заботился об этом. Теперь, когда это больше не поведение по умолчанию в Excel 365, возникает много вопросов. Этот учебник призван дать ответы.
У вас возникает ощущение, что вы знаете о своих книгах все, а затем в начале ваших формул из ниоткуда появляется символ @. Что это значит? И как именно это работает? В двух словах, это неявный оператор пересечения, который отключает новое поведение массива по умолчанию для формулы и сообщает Excel, что нужно вернуть одно значение. Для более подробной информации, пожалуйста, продолжайте читать.
Неявное пересечение в Excel означает сокращение нескольких значений до одного значения. Обычно это происходит, когда в формулу передается массив или диапазон, который должен выводить только одно значение в одной ячейке.
Неявное пересечение в Excel 2019 — 2000
В традиционном Excel неявное пересечение является поведением по умолчанию. Он выполняется в фоновом режиме для всех формул. Логика неявного пересечения выглядит следующим образом:
- Если формула возвращает одно значение, верните это значение (на самом деле неявное пересечение в этом случае ничего не делает).
- В случае диапазона используйте значение из ячейки в той же строке или столбце, что и формула.
- В случае массива используйте верхнее левое значение.
Например, при умножении двух столбцов чисел Excel выбирает только одно число из каждого столбца в той же строке, где находится формула, и выводит результат только в одну ячейку (в нашем случае D2):
=В2:В5*С2:С5
Чтобы умножить числа в других ячейках, нужно скопировать формулу вниз.
Чтобы отключить неявное пересечение, вы должны ввести формулу массива с помощью Ctrl + Shift + Enter (поэтому традиционные формулы массива иногда называют формулы СПП). Это четко указывает Excel на необходимость обработки нескольких входных значений в виде диапазонов или массивов.
В нашем случае выберите ячейки D2:D5, введите приведенную выше формулу и подтвердите ее, нажав одновременно клавиши Ctrl + Shift + Enter. Как только вы это сделаете, формула будет заключена в {фигурные скобки}, указывая на то, что это формула массива. В результате числа в каждой строке перемножаются сразу:
Неявное пересечение в Excel 365
Внедрение динамических массивов изменило поведение по умолчанию всех формул в Excel 365. Теперь любая формула, которая потенциально может давать несколько результатов, автоматически переносит их на лист. Это делает неявное пересечение ненужным, и оно больше не запускается по умолчанию. По этой причине Excel 365 иногда называют динамический массив Excel или же ДА Excel.
Здесь все диапазоны умножаются на обычную формулу, которая вводится только в самую верхнюю ячейку (D2):
=В2:В5*С2:С5
В результате получается диапазон разливов, состоящий из 4 ячеек:
Если вы хотите, чтобы формула возвращала только одно значение, вам нужно явно включить неявный перехват. Для этого они ввели специальный оператор, и в следующем разделе вы найдете полную информацию о нем.
Оператор неявного пересечения Excel — символ @
Неявный оператор пересечения был введен в Excel 365, чтобы предотвратить поведение динамического массива по умолчанию. Если вы хотите, чтобы формула возвращала только одно значение, поставьте @ перед именем функции (или перед определенным диапазоном или массивом внутри формулы), и она будет вести себя как обычная формула без массива в додинамических версиях.
Например:
=@B2:B5*@C2:C5
Примечание. Оператор неявного пересечения поддерживается только в подписках Microsoft 365. Если вы попытаетесь добавить знак @ в более старых версиях, он будет автоматически удален после завершения формулы.
Почему @ добавляется к старым формулам?
В Excel 365 вы можете заметить символ @, добавленный к некоторым вашим формулам при открытии книги, созданной в более старой версии. По большей части это делается для того, чтобы заставить формулу вести себя так же, как в исходной версии, в которой она была создана. Другими словами, если формула возвращала одно значение в более старой версии, но возвращала несколько результатов в Excel 365, она будет автоматически иметь префикс @, чтобы деактивировать поведение массива.
Обычно оператор пересечения вставляется перед функцией, которая может возвращать многоячеечные массивы или диапазоны, такие как OFFSET, INDEX или определяемые пользователем функции.
Например, следующая формула, созданная в предварительно динамическом Excel:
=ИНДЕКС(B2:C5,,F1)
примет следующий вид в динамическом массиве Excel:
=@ИНДЕКС(B2:C5,,F1)
Причина в том, что без оператора @ формула вернет все значения из C2:C5, потому что row_num аргумент функции ИНДЕКС опущен. Чтобы обеспечить согласованное поведение во всех версиях, становится очевидным ранее незаметное неявное пересечение. Пожалуйста, сравните результаты:
В случае, если функция с потенциальным многоячеечным выводом вложена в другую функцию, которая может обрабатывать массивы и выводить один результат (например, СУММ, СЧЁТ, СРЗНАЧ и т. д.), то нет причин запускать неявное пересечение, и формула переносится в динамический Excel как есть без добавления знака @. Например:
=СРЗНАЧ(ИНДЕКС(B2:C5,,F1))
Могу ли я удалить символ @ из своих формул?
Что вы можете. Excel выполняет преобразование формулы только один раз. Если оператор @ нарушает или негативно меняет поведение ваших формул, вы можете удалить @ вручную, и он больше не появится после сохранения книги.
Каковы последствия удаления оператора неявного пересечения? В зависимости от того, что возвращает часть формулы, следующая за знаком @, возможны три результата:
- Если возвращается одно значение, изменений не будет.
- Если массив возвращается, он будет распространяться на соседние ячейки.
- Если массив возвращается, но пустых ячеек недостаточно для отображения всех значений, возникает ошибка #SPILL.
Зачем использовать оператор @ в Excel 365?
Как уже упоминалось, Excel для Microsoft 365 по умолчанию обрабатывает все формулы как формулы массива, и вам не нужно нажимать Ctrl + Shift + Enter, как вы делали это в предыдущих версиях. Если вы хотите отключить поведение массива, вставьте неявный оператор пересечения.
Пример 1. Избавьтесь от #РАЗЛИВ! ошибка
Очень распространенный сценарий — предотвращение или исправление ошибок #SPILL. Если вам удобно ссылаться на целые столбцы (что вообще не очень хорошая идея, потому что тормозит Excel), но тем не менее такая формула будет нормально работать в преддинамических версиях:
=ВПР(А:А, Г:Д, 2, ЛОЖЬ)
В динамическом Excel это приведет к ошибке #SPILL, поскольку недостаточно места для отображения почти 1,05 миллиона результатов.
Добавление @ перед аргументом lookup_value решает проблему:
=ВПР(@А:А, Г:Д, 2, ЛОЖЬ)
Когда Excel предвидит, что формула может выйти за пределы рабочего листа, он предложит исправление, и вам будет разумно его принять:
Пример 2. Заставьте формулу работать правильно в старых версиях Excel
Если вы используете подписку на Microsoft 365 и делитесь своими файлами с кем-то, кто использует более старую версию, важно обеспечить согласованное поведение формулы для всех.
Предположим, вы написали эту формулу динамического массива в Excel 365:
=В2:В5*С2:С5
В более старых версиях он будет преобразован в устаревшую формулу массива CSE:
{=B2:B5*C2:C5}
и вернуть диапазон значений в обоих случаях:
Если вы хотите вывести только один результат, добавьте @ перед каждым выражением, а затем скопируйте формулу в необходимое количество ячеек (чтобы сохранить диапазоны без изменений, не забудьте заблокировать их абсолютными ссылками на ячейки):
=@$B$2:$B$5*@$C$2:$C$5
В старых версиях Excel символ @ будет автоматически удален, и формула примет обычный вид:
=$B$2:$B$5*$C$2:$C$5
Чего не следует делать, так это смешивать в одной формуле неявное пересечение и вычисление массива! Например, если вы попытаетесь ввести что-то подобное в Excel 365:
=@B2:B5*C2:C5
Вы будете уведомлены, что такая формула не поддерживается в более старых версиях:
Если вы отклоните предложенный вариант, смешанная формула будет принята и принесет некоторые результаты (хотя они могут быть не такими, как вы ожидали). Но когда вы открываете эту формулу в предварительно динамическом Excel, функция _xlfn.SINGLE появится вместо неявного оператора пересечения:
=_xlfn.SINGLE(B2:B5)*C2:C5
Когда эта формула оценивается старой версией Excel, #ИМЯ! будет возвращена ошибка.
Неявное пересечение в таблицах Excel
Вообще говоря, поведение неявного пересечения в таблицах соответствует вашей версии Excel.
В Excel 2019 и более ранних версиях вы можете ссылаться на весь столбец, и формула будет разрешаться в одну ячейку в текущей строке.
Например, эта формула успешно умножает числа в Цена а также Кол-во столбцы:
знак равно[Price]*[Qty.]
Несмотря на то, что он относится ко всем столбцам, преддинамический Excel по-прежнему работает с отдельными значениями на уровне строки.
В Excel 365 этот подход не работает, так как неявное пересечение отключено по умолчанию. Поскольку формула возвращает несколько значений, и Excel не может поместить их все в таблицу, она предложит добавить к именам столбцов префикс с символом @:
Если у вас есть опыт работы со ссылками на таблицы, этот синтаксис должен быть вам знаком — символ @ указывает, что формула будет обрабатывать значения из столбцов. Цена а также Кол-во в том же ряду.
знак равно[@Price]*[@[Qty.]]
И это будет хорошо работать во всех версиях:
Кончик. Если вы намерены использовать функцию динамического массива для вычисления данных таблицы, обязательно поместите формулу вне таблицы, поскольку динамические массивы внутри таблиц не поддерживаются.
Вот как работает неявное пересечение в Excel. Я благодарю вас за чтение и надеюсь увидеть вас в нашем блоге на следующей неделе!
Вас также могут заинтересовать:
Это перевод главы книги Bill Jelen. Excel Dynamic Arrays Straight to the Point. К содержанию.
Почему формулы массива (Ctrl+Shift+Enter) были так сложны для понимания?
Если вы когда-либо вводили Ctrl+Shift+Enter, эта глава прольет свет, почему формулы массива были столь трудными в использовании в предыдущих версиях Excel. Для начала несколько вопросов о работе прежних версий Excel. Я не ожидаю, что все ваши ответы будут правильными. Попробуйте угадать. Далее по ходу главы я внесу ясность в эти вопросы.
Вопрос 1. Если в ячейку D8 вы введете =B4:B14, каков будет результат?
- 2047, сумма значений B4:B14.
- 1, значение первой ячейки в диапазоне.
- 16, значение в той же строке диапазона.
- Ошибка #ЗНАЧ! синтаксис формулы неверный
Рис. 44. Что вы получите, если в старом Excel в одной ячейке попытаться вернуть много значений?
Скачать заметку в формате Word или pdf, примеры в формате Excel
Вопрос 2. Если вы введете =B2:B14 в ячейку D16. Что вы получите? Ответ такой же, как и для вопроса 1? Или иной?
Вопрос 3. Что вернет формула =СУММ(C2:E2*B5:B7)?
- 6, потому что 2 умножить на 3 = 6.
- 18, потому что каким-то волшебным образом выполнится 2*3 + 2*3 + 2*3 = 18.
- 54, потому что вы только что приняли ЛСД.
- Ошибка #ССЫЛКА! потому что такая запись недопустима.
Рис. 45. Сумма произведений двух массивов
Вопрос 4. Чему равно =СУММ(ДЛСТР(A4:A15))? Будут ли результаты разными, если:
- ввести формулу и нажать Enter;
- ввести формулу и нажать Ctrl+Shift+Enter;
- ввести в ячейку С4 формулу =ДЛСТР(A4), скопировать ее вниз до С15, суммировать значения в диапазоне С4:С15.
Рис. 46. Функция ДЛСТР ожидает в качестве аргумента одну ячейку
В прошлом я мог взять сложную формулу массива из книги Майка Гирвина Ctrl+Shift+Enter и использовать ее. Я иногда мог объяснить, как она работает. Для этого я открывал диалоговое окно Вычисление формулы на вкладе Формулы. Однажды я даже целый час говорил о формулах массива на мероприятии в Люцерне, Швейцария. Экхард Пфайффер присутствовал при этом и даже кивнул мне, подтверждая, что я не полностью ошибаюсь в своем понимании. Правда, я говорил по-английски для немецкоговорящей аудитории, так что, возможно, я ошибался довольно часто, но слушатели были слишком вежливы, чтобы указать мне на это.
Но я никогда по-настоящему не понимал формулы массивов, пока не посмотрел презентацию Джо Макдэйда о формулах массивов в прежних версиях Excel.
Новые формулы массива настолько просты, что кажется странным поместить этот сложный материал в книге. Я размещаю его ближе к концу книги, поэтому многие люди его не прочтут. Я надеюсь, что вы будете исключением.
Краткий глоссарий
- Старый Excel: Excel, который не поддерживает формулы динамических массивов.
- Скалярный: одно значение или одна ячейка.
- Массив или вектор: много значений или много ячеек прямоугольного диапазона.
Старый Excel использовал массивы гораздо чаще, чем мы думаем
В старом Excel вы использовали массивы в следующих случаях:
- Когда имя не было диапазоном.
- При использовании формулы в условном форматировании.
- При нажатии клавиши F9 в то время, как были выделены некоторые символы в строке формул. Даже обычные формулы демонстрировали поведение массивов.
В следующих разделах описываются пять типов поведения при работе с массивами:
- Неявное пересечение (Implicit Intersection)
- Подъем (Lifting).
- Попарный подъем (Pairwise Lifting).
- Трансляция (Broadcasting).
- Усечение массива (Array Truncation).
Неявное пересечение
Неявное пересечение возникает, когда диапазон передается в формулу, ожидающую скаляр (одно значение), и Excel выбирает значение в той же строке или столбце, что и формула. Если в старом Excel вы введете =ДЛСТР($A$2:$A$7)[1] в ячейке В2, формула вернет значение 5, т.е. длину строки в ячейке А2.
Рис. 47. Неявное пересечение приводит к тому, что ответ основан на ячейке A2
Если вы введете эту же формулу в ячейке В4, ответ будет основан на ячейке А4:
Рис. 48. Скопируйте формулу в ячейку В4, и ответ будет основан на A4
Неявное пересечение работает и с горизонтальными диапазонами. Если ввести формулу =ДЛСТР(@$E$1:$J$1) в ячейку Е3, ответом будет длина строки Е1:
Рис. 49. ДЛСТР работает и с горизонтальными диапазонами
Неявное пересечение всегда работало в старом Excel. Мы просто не знали о нем, и поэтому не использовали. Однажды я выдал приз Гуру Excel за следующую формулу: =ВПР($A$2:$A$10;$F$2:$H$30;3;ЛОЖЬ). Эта формула одинакова во всем диапазоне D2:D10. Единственная причина, по которой она работает, заключается в том, что неявное пересечение указывает для формулы в D2 только на A2 из всего диапазона A2:A10… В D3 на А3, и т.д.
Рис. 50. В старом Excel можно использовать ВПР как функцию массива благодаря неявному пересечению
Нарушение неявного пересечения
Неявное пересечение терпит неудачу, когда вы вводите формулу в ячейку, которая не пересекает данные. Например, в ячейке G3:
Рис. 51. Если пересекаться не с чем, формула возвращает ошибку
Ошибка вернется, и когда Excel не сможет решить, с какой именно ячейкой использовать неявное пересечение. С В8, В9 или В10?
Рис. 52. Ошибка возвращается также, если формула пересекается с более чем одной ячейкой диапазона
В старом Excel формула =СУММ(В2:В6*С2:С6) в зависимости от того, в какой ячейке она вводилась, либо возвращала ошибку, либо выдавала результат перемножения двух значений с использованием неявного пересечения:
Рис. 53. Там, где в старом Excel не справляется функция СУММ на выручку приходит СУММПРОИЗВ
Если заменить СУММ на СУММПРОИЗВ, результат будет адекватным. Это связано с тем, что СУММПРОИЗВ игнорирует неявное пересечение.
Неявное пересечение – это то, что иногда приводило к ошибкам. Более того, часто вы не понимали, что виновато неявное пересечение.
Когда формула ожидает одно значение, а поступает массив, происходит подъем (lifting)
Что происходит, когда старый Excel ожидает одно значение, а вы предоставляете диапазон значений? Excel сформирует из этих значений массив, и функция вернет массив того же размера. Это называется подъем – подъем (или увеличение размерности) от скалярной величины к вектору.
Рис. 54. Функция ДЛСТР ожидает скаляр
Когда вы подаете на вход функции диапазон значений (вектор), Excel поднимает функцию и вычисляет в оперативной памяти 12 значений. Их можно увидеть, если выделить формулу в строке формул, и нажать F9, заменяя формулу значениями:
Рис. 55. В строке формул показан массив из 12 результатов работы функции ДЛСТР(А1:С4)
Усечение массива
Если вы попытаетесь использовать =ДЛСТР(A1:C4) в старом Excel, и введете формулу, нажимая Ctrl+Shift+Enter, Excel применит к функции подъем и вычислит 12 результатов. Но вернет только одно значение, соответствующее верхней левой ячейке диапазона A1:C4, или 3, потому что ДЛСТР("
Joe"
) = 3. Это иллюстрирует концепцию усечения массива.
Прим. Багузина. Массив может усекаться не до одной ячейки, о до нескольких. Например, выделите ячейки Е6:F7 и введите формулу массива {=ДЛСТР(A1:C4)}. 12 значений, хранящиеся в памяти функции =ДЛСТР(A1:C4) будут представлены четырьмя результатами, соответствующими диапазону А1:В2.
Рис. 56. Усечение массива из 12 значений до четырех
Использование функции-оболочки в старом Excel
Распространенным подходом в старом Excel было использование функции массива ДЛСТР(A1:C4) внутри функции-оболочки. Например, вводя =СУММ(ДЛСТР(A1:C4)) и нажимая Ctrl+Shift+Enter в любом месте листа вы получите правильный результат – 67. Нажатие Ctrl+Shift+Enter блокирует неявное пересечение.
Рис. 57. Формула массива работает в старом Excel в любом месте листа
Ctrl+Shift+Enter также управляет размером выходных данных. Если вы предварительно выделите диапазон «правильного» размера, введете формулу, возвращающую массив, и нажмете Ctrl+Shift+Enter, вы заполните все ячейки в предварительно выделенном диапазоне.
Пять функций в старом Excel блокировали неявное пересечение и без использования Ctrl+Shift+Enter. Это: СУММПРОИЗВ, МУМНОЖ, МОБР, ЧСТРОК и ЧИСЛСТОЛБ.
Старый Excel был способен поднять функцию и вернуть множество результатов. Проблема заключалась в том, что неявное пересечение часто блокировало ответ. Если бы неявное пересечение не мешало, то усечение массива позволяло вернуть ответ для первого элемента массива.
Благодаря динамическим массивам вам больше не нужно беспокоиться о том, что неявное пересечение испортит результаты. Формула =СУММ(ДЛСТР(A1:C4)), введенная в любом месте листа без Ctrl+Shift+Enter, вернет правильный результат:
Рис. 58. Формула динамического массива в новом Excel не требует Ctrl+Shift+Enter
От подъема к попарному подъему
Если Excel ожидает два скалярных выражения, а вы предоставляете ему два массива, Excel применит к ним попарное поднятие. Например, в старом Excel нельзя получить корректный результат, просто введя формулу ={1:2:3:4}+{1:1:1:1}
Рис. 59. Два массива имеют одинаковое количество строк (четыре), но для их сложения нужно поместить векторы внутрь функции
А. Если вы введете формулу ={1:2:3:4}+{1:1:1:1} в ячейку А1, и нажмете Enter или Ctrl+Shift+Enter, результат будет одинаковым = 2. Т.е., сумма двух первых элементов каждого массива. Б. Если выделить формулу ={1:2:3:4}+{1:1:1:1} в строке формул, и нажать F9, формула вернет массив {2:3:4:5}. В. Если выбрать диапазон С1:С4, ввести формулу ={1:2:3:4}+{1:1:1:1} и нажать Ctrl+Shift+Enter, вычисленный в Б. диапазон отразится в С1:С4. Г. Корректное суммирование двух массивов можно получить, если поместить исходную формулу внутрь функции СУММ.
Трансляция приводит все массивы к одному размеру
Когда Excel имеет дело с массивом и скаляром, он расширяет скаляр до размерности массива. Просто размножая значение скаляра. Предположим, что у вас есть массив из трех строк по одному столбцу. Чтобы умножить его на скаляр (или массив из одной строки и одного столбца), Excel расширит этот скаляр теми же значениями до размера первого массива:
Рис. 60. Трансляция (или расширение) приводит два массива к одному размеру
Если поместить произведение массива и скаляра внутрь функции суммирования =СУММ({1;2;3}*3), вы получаете верный ответ = 18. Как обычно, вы можете ввести формулу ={1;2;3}*3, и в строке формул нажать F9, чтобы увидеть, что Excel возвращает массив ={3;6;9}.
Кстати о массивах констант. Они состоят из фигурных скобок со значениями внутри. Элементы в одной строке и разных столбцах разделяются точкой с запятой. Для перехода к следующей строке используется двоеточие. Например, массив {1;2;3:4;5;6} соответствует:
Рис. 61. Синтаксис массива констант
Любопытно, что если вы попытаетесь умножить массив {1;2;3} на {3;3}, Excel не будет знать, что делать с третьей ячейкой во втором массиве. Поэтому промежуточное вычисление вернет СУММ(3;6;#Н/Д), и общий результат будет ошибочным #Н/Д.
Рис. 62. В случае массивов разных размеров формула может вернуть ошибку
Как описанное выше поведение влияет на динамические массивы?
Неявный оператор пересечения @ делает то, что уже было возможно и в старом Excel. Но оператор явно указывает на пересечение, что делает ваши действия более осмысленными. В старом Excel формулы массива работали только тогда, когда вы совершали какую-то магию. Например, Ctrl+Shift+Enter или СУММПРОИЗВ / МУМНОЖ. Последние позволяли отключить неявное пересечение. С появлением динамических массивов неявное пересечение отключено в Excel по умолчанию. Если всё же вам нужно использовать пересечение (ставшее явным) добавьте оператор @.
Почему Excel иногда добавляет оператор пересечения?
Если вы откроете какую-нибудь старую книгу Excel, вы можете заметить, что в начале формулы или перед аргументом появился знак @. В. Начните редактировать формулу и появится сообщение:
Рис. 63. Excel добавляет символ @, когда формула может использовать неявное пересечение
За те 15 месяцев, пока динамические массивы проходили бета-тестирование было много вопросов, почему Excel добавил @ к той или иной формуле. Джо Макдэйд вступал в долгую дискуссию о том, почему в определенные дни, когда Луна в такой-то фазе эта формула может вызвать неявное пересечение. Эти повторяющиеся дискуссии заставили меня осознать, что неявное пересечение в старом Excel происходило существенно чаще, чем я подозревал.
На рис. 64 формула в B2 не может принять вид =ИНДЕКС(B4:F15;0;2) или =ИНДЕКС(B4:F15;2;0).[2] Проверка данных в ячейках С1 и F1 предотвращает это. Но если кто-то введет 0 в A2, а затем скопирует A2 и вставит в F1, то =ИНДЕКС(B4:F15;2;0) вернет массив {2;4;8;16;32}. Поскольку формуле в В2 некуда разлиться, Excel вернет ошибку #ПЕРЕНОС! Неважно, что этого никогда не произойдет. Excel понял, что это может произойти, и добавил @ к формуле. Этот оператор подавит динамический диапазон, и выведет только одно значение в соответствии с неявным пересечением (ставшим в такой нотации явным).
Рис. 64. Джо и команда Calc рассматривают массу сценариев, в которых может возникнуть неявное пересечение
Ответы на вопросы в начале главы
Вопрос 1. Если в ячейку D8 вы введете =B4:B14, каков будет результат?
- 2047, сумма значений B4:B14.
- 1, значение первой ячейки в диапазоне.
- 16, значение в той же строке диапазона.
- Ошибка #ЗНАЧ! синтаксис формулы неверный.
Рис. 65. В старом Excel в результате неявного пересечения вы получите 16 в строке 8 и #ЗНАЧ! в строке 16
Вопрос 2. Если вы введете =B2:B14 в ячейку D16. Что вы получите? Ответ такой же, как и для вопроса 1? Или иной?
См. рис. 65. Ответ иной. Вы получите ошибку #ЗНАЧ! так как неявное пересечение происходит за пределами исходного массива.
Вопрос 3. Что вернет формула =СУММ(C2:E2*B5:B7)?
- A. 6, потому что 2 умножить на 3 = 6.
- B. 18, потому что каким-то волшебным образом выполнится 2*3 + 2*3 + 2*3 = 18.
- C. 54, потому что вы только что приняли ЛСД.
- D. Ошибка #ССЫЛКА! потому что такая запись недопустима.
Благодаря трансляции Excel расширит массив {2;2;2} до {2;2;2:2;2;2:2;2;2}, а массив {3:3:3} до {3;3;3:3;3;3:3;3;3}. У вас будет два массива 3х3, и их перемножение даст массив 3х3 в каждой ячейке которого будет шестерка. А девять по шесть вернет 54:
Рис. 66. Произведение двух зеленых массивов даст 54
Вопрос 4. Чему равно =СУММ(ДЛСТР(A4:A15))? Будут ли результаты разными, если:
- ввести формулу и нажать Enter;
- ввести формулу и нажать Ctrl+Shift+Enter;
- ввести в ячейку С4 формулу =ДЛСТР(A4), скопировать ее вниз до С15, суммировать значения в диапазоне С4:С15.
Рис. 67. В старом Excel используйте Ctrl+Shift+Enter, чтобы предотвратить неявное пересечение
В старом Excel, если ввести формулу =СУММ(ДЛСТР($A$4:$A$15)) в ячейки диапазоне С4:С15 и нажать Enter, то, из-за неявного пересечения они вернут длину той же строки из диапазоне А4:А15. Если ввести =СУММ(ДЛСТР(A4:A15)) в любом месте листа и нажать Ctrl+Shift+Enter, формула вернет 113. ДЛСТР ожидает один аргумент, но подъем заставляет функцию вычислить длину строки 12 раз. Если поместить ДЛСТР(A4:A15) внутрь функции СУММ, эти 12 значений будут суммированы. Варианты b) и c) идентичны.
[1] Поскольку у меня на ПК установлен новый Excel, при вводе формулы =ДЛСТР($A$2:$A$7) в ячейку В2 он разольет массив на диапазон В2:В7. Я использую оператор неявного пересечения @ в аргументе функции, чтобы подавить работу функции динамического массива, и вывести только одно значение. – Здесь и далее прим. Багузина.
[2] Ноль во втором или третьем аргументе означает, что формула вернет массив, включающий весь столбец или всю строку диапазона B4:F15.
В этой короткой статье поговорим про такой малоизвестный механизм Excel, как неявное пересечение.
Суть данного эффекта проявляется, когда вы в ячейке ссылаетесь на некоторый диапазон. В большинстве случаев вы получите ошибку вычисления #ЗНАЧ!, так как ячейка не может вместить в себя диапазон, как часть не может содержать целое. Однако, в некоторых случаях Excel берёт на себя смелость и возвращает вам конкретную ячейку из указанного диапазона. Делает это он на основе неявного пересечения. Посмотрите на этот экран:
Тут ячейка E8 получает значение из B8, хотя своей формулой ссылается на более широкий диапазон B3:B10. Excel осуществил неявное пересечение, поскольку восьмая строка (E8) пересекает этот диапазон и однозначно в месте пересечения указывает на B8.
Аналогично происходит и тут с той лишь разницей, что диапазон транспонирован из вертикального в горизонтальный. D1 получает значение из D6, хотя ссылается на C6:J6.
Принципиальным моментом для обсуждаемого механизма является однозначность неявного пересечения. Посмотрите, что получается, когда неявное пересечение своим результатом получает диапазон, а не единичную ячейку. Формула возвращает #ЗНАЧ!, так как непонятно, какую ячейку возвращать в G6 из диапазона B6:E6.
Эффект неявного пересечения срабатывает и когда вы ссылаетесь на другой лист и даже другую книгу. Более того, если данные располагаются на разных листах (в одной или разных книгах), то неявное пересечение может сработать сразу для двух координат, когда ваша ячейка располагается внутри неявного диапазона. Так происходит на данном экране, где Test!C7 неявно пересекается с диапазоном MyData, ссылающегося на Data!B3:E10. В этот диапазон попадает и столбец C, и строка 7, — таким образом возвращается значение из Data!C7.
Неявное пересечение описывает поведение формулы в Excel, когда многие значения сводятся к одному значению. Обычно это происходит, когда диапазон или массив передается в формулу, предназначенную для отображения одного результата в одной ячейке. В этой ситуации Excel преобразует формулу в одно значение, выполнив следующие действия:
- Если результатом уже является одно значение, верните это значение.
- Если результатом является массив, попробуйте вернуть значение из той же строки или столбца, что и формула.
- В противном случае верните верхнее левое значение из массива
Иногда, когда результатом является массив, Excel не возвращает верхнее левое значение в массиве (шаг № 3), если формула не введена в формулу массива с помощью Ctrl + Shift + Enter. Другими словами, ввод формулы с помощью Ctrl + Shift + Enter отключает неявное пересечение.
пример
Неявное пересечение может происходить, когда формула вводится рядом с вертикальными данными или над или под горизонтальными данными. Например, формула в D6 в показанном примере:
=B4:B8+1
В этом случае Excel преобразует диапазон B4: B8 в значение в B6 (3) и возвращает результат 4. Когда Excel не может определить одну ссылку в формуле, в которой передается диапазон, но ожидается одно значение , возвращается ошибка #VALUE. Например, если указанная выше формула введена в ячейку D9, результатом будет #VALUE.
Формулы массива
Ввод формулы массива с помощью Ctrl + Shift + Enter (CSE) явно отключает неявное поведение пересечения. Это позволяет создавать формулы, управляющие вводом нескольких значений в виде диапазонов. Если формула в D6 заключена в СУММ, то вводится с помощью Ctrl + Shift + Enter:
(=SUM(B4:B8+1))
Все значения в диапазоне обрабатываются, и формула возвращает 27.
Таблицы Excel
Неявные пересечения могут быть полезны в таблицах Excel, где одна и та же формула может использоваться в нескольких ячейках (для согласованности), но по-прежнему разрешается в одной ячейке в метке строки. Например, эта формула добавит 7 дней к значению в столбце «дата» в таблице:
=table(date)+7
Несмотря на то, что формула относится ко всему столбцу «дата», формула будет работать с одним значением в столбце даты на уровне строки.
Динамический массив Excel и оператор @
В версии Excel с «динамическим массивом» (доступной только в Office 365) все формулы по умолчанию обрабатываются как формулы массива, поэтому нет необходимости вводить формулу с помощью Ctrl + Shift + Enter, чтобы включить поведение массива.
Однако из соображений совместимости вы иногда будете видеть символ @, вставленный в формулу, созданную в более старой (до динамического массива) версии Excel. Этот символ @ называется оператором неявного пересечения, и он отключает поведение массива. Другими словами, он сообщает Excel, что вам нужно одно значение.
Это сделано для того, чтобы старые формулы продолжали возвращать один и тот же (единственный) результат, когда в противном случае они могли бы вылить несколько значений на рабочий лист. Как правило, функции, возвращающие диапазоны или массивы из нескольких ячеек, автоматически получают префикс @, если они были созданы в более ранней версии. Такое поведение наблюдается только в версиях Excel с динамическими массивами.
Хорошие ссылки
Оператор неявного пересечения (microsoft.com)