Многие, точнее подавляющее большинство пользователей, среди которых есть и многолетние практики, вполне спокойно обходятся без формул массива. Причина в том, что это довольно сложный инструмент для понимания, плюс он используется как правило для решения сложных и заковыристых задач. Есть задачи, которые без формул массива (далее ФМ) в принципе средствами Excel не решаемы.
В чем же фишка? Уже из названия видно, что это формулы, которые работают с целыми диапазонами (то бишь массивами). Есть функции, которые работают даже с двумерными массивами, например ИНДЕКС. Но принцип действия гораздо проще, чем в ФМ.
В чем преимущества использования этих формул? Огласите списочек Я бы выделил следующие:
- Они позволяют решать сложные задачи там, где пасуют остальные средства Excel, кроме, пожалуй сводных таблиц. Несложные задачи лучше не решать, это как забивать кувалдой кнопку в доску, чтобы повесить объявление о субботнике (был недавно на работе ). Дело даже не в этом, а в том, что они жрут памяти больше обычных формул.
- Они позволяют обходиться одной формулой там, где в противном случае надо было бы делать макросы, плодить вспомогательные таблицы и т.д.
Давайте наконец перейдем от вступления к практике. Итак, сначала определимся с массивами. Массив, если по простому, это набор данных, который Excel’ем обрабатывается как один аргумент (параметр). Он может быть одномерным (горизонтальным или вертикальным) или двумерным.
Грубо говоря, наши формулы массива – это те же формулы, что мы используем повседневно, только в качестве аргументов там, где обычная функция использует отдельное значение, формула массива может использовать диапазон.
Первый пример, пока простенький.
У нас есть два диапазона. Мы хотим получить сумму их произведений. Это простой пример, который я обычно реализую следующим образом: добавляю третий столбец (или строчку), получаю произведения и суммирую весь столбец
Сделаем это через формулу массива: сначала мы определяем конечную функцию, это сумма.
=СУММ()
Затем определяем аргументы – а это для нас сумма массива, который сам по себе является произведением двух массивов, т.е.
=СУММ(массив1*массив2)
И последний, завершающий штрих, без которого Excel огрызнется «сам дурак!» - надо нажать в режиме редактирования CTRL+Shift+Enter.
Есть нюанс – вообще-то есть функция СУММПРОИЗВ, которая призвана давать сумму произведений массивов. Так что прежде чем использовать ФМ, надо посмотреть, может нам помогут функции СУММЕСЛИ и ей подобные?
Пример второй, сложноватый.
Найти сумму 5го, 6го и 7го наибольших элементов набора данных. Как это делается без ФМ: таблица сортируется по убыванию, берется дополнительный столбец, там проставляются порядковые номера и через функцию СУММЕСЛИ вытаскиваем сумму. Ну или еще каким-нибудь способом, которым это можно сделать. Не сильно проще.
Формула массива делает все без дополнительных телодвижений:
=СУММ(НАИБОЛЬШИЙ(B3:B25;{5;6;7}))
Понятно? Нет? Ну, давайте по шагам:
- Функция НАИБОЛЬШИЙ ищет те элементы, которые заданы (5,6 и 7-й) по порядку убывания. Результатом будет три числа, т.е. отдельный массив.
- Функция СУММ суммирует этот массив.
Не буду говорить за всех, я чаще всего использую в ФМ следующие функции:
ЕСЛИ
ИНДЕКС
ПОИСКПОЗ
СТРОКА (СТОЛБЕЦ)
НАИБОЛЬШИЙ (НАИМЕНЬШИЙ)
СУММ
И(ИЛИ)
Теперь, раз вы имеете малое представление о действии ФМ, скажу, для чего я лично использую их
- Для нахождения в какой-либо таблице ВСЕХ(!) элементов, отвечающих заданному условию.
Кто уже просматривал мой «Ускоренный практикум», помнит, что с помощью ФМ я выстраивал первую пятерку игроков, ранжируя по определенному признаку. Т.е., у меня например есть таблица банков, где один из признаков – количество банкоматов. В принципе, самое простое решение – использовать функцию НАИБОЛЬШИЙ, чтобы вытащить первую пятерку (десятку, двадцатку) значений по показателю банкоматов и затем с помощью функции ВПР найти соответствующие им названия банков. Но что делать, если значения повторяются? (Забудем на время про сводную таблицу.) Т.е., Альфабанк (не путать с реальным названием ) имеет одно и то же количество банкоматов, что и Бетабанк. ВПР в этом случае найдет только первого, того, кто в таблице стоит повыше. Т.е. будет в пятерке банков два Альфабанка.
- Для автоматической сортировки и фильтрации элементов.
Для решения такой же задачи стандартными средствами потребовалось бы все время пользоваться сортировкой или сводной таблицей. И в этом случае ссылаться на эту таблицу было бы не то что сложно, но немного муторно. А у меня например, есть в списке тех отчетов, что я составляю, рейтинг банков. Он составляется на ежемесячной основе и содержит 10-20 показателей – кредитный портфель, депозитный портфель, ROE, ROA и т.д. И по форме отчета есть 10-20 таблиц, которые являются основой для диаграмм, соответственно должны быть отсортированы по убыванию.
Само собой, мне, как и каждому экселисту, лень было делать эти сортировки, поэтому я просто настроил ФМ и теперь просто завожу данные, а они уже сами сортируются и выделяются нужными цветами.
Тонкости использования ФМ:
- Бывает, приходится использовать константы, типа {1;2;3;4;5}. Это проще, чем где-то его набивать и вставлять ссылку. Но надо учитывать, что если числа разделяются точкой с запятой, то это горизонтальный массив. А если двоеточием – {1:2:3:4:5} – то вертикальный.
- ФМ может быть применена как к ячейке, так и к диапазону. Соответственно, на выходе будет диапазон. Менять формулу в этом случае можно только во всем диапазоне. Как вводится и меняется формула – выделяется диапазон, и забивается формула, завершается CTRL+Shift+Enter.
- Отличительным признаком ФМ являются фигурные скобки. Они видны, пока не перейдете в режим редактирования ячейки. Как-то непривычно порой разбирая формулы, видеть, что там где должна быть ссылка на ячейку, стоит диапазон – ЕСЛИ(А1:А5>0;1;0). Меня это сильно удивляло, как так .
Кто еще считает, что можно нормально обойтись и без ФМ, напишите в комментариях к статье, сможете ли реализовать расчет цены остатков на складе по методу ФИФО/ЛИФО.
«Глаза боятся, а руки делают»
P.S. Понравилась статья? Подпишитесь на рассылку в правой части страницы (Бесплатный курс "Топ-10 инструментов Excel") и будьте в курсе новых событий.
Если осилю весь текст, может, больше замечаний не будет
Пока — о замеченной грубой ошибке.
Формула массива делает все без дополнительных телодвижений:
=СУММ(НАИБОЛЬШИЙ(B3:B25;{5;6;7}))
Обрабатывает массив, да. Но не формула массива. В формуле применен массив констант.
Обязательное условие формулы массива — ввод ее с помощью Ctrl+Shift+Enter и обрамление фигурными скобками.
{=A1} — формула массива! Бесполезно? Конечно. Но ФМ.
=СУММ(НАИБОЛЬШИЙ(B3:B25;СТРОКА(5:7))) — а эта формула без введения с помощью трех клавиш покажет ошибочный результат, ее нужно водить как формулу массива.
Технически со всем согласен Но статья не академическая, а для рядовых пользователей и сознательно взят такой стиль.
А Баба Яга против
Не нужно запутывать рядовых пользователей.
формулы массива… в качестве аргументов там, где обычная функция использует отдельное значение, формула массива может использовать диапазон
вообще-то есть функция СУММПРОИЗВ
{=СУММ(массив1*массив2)}
=СУММПРОИЗВ(массив1;массив2)
Результат работы одинаков, обрабатываются одинаковые диапазоны, но вторая — НЕ формула массива (и, кстати, работает быстрее процентов на 30).
Обработка массивов и формулы массива — это нужно разграничивать.
Предлагаю доработать статью с учетом замеченной ошибки. Комментарии можно удалить, не обижусь )
Нет, не удалю. Благодарен вам, что вы это делаете. И постараюсь сделать так, чтобы и стиль остался и ошибки ушли.
Здравствуйте! Не уверен, что пишу под нужной статьей)
Задача такова: в столбце B даны имена, в столбце C неуникальные текстовые значения (повторяются для каждого имени, таким образом имя дублируется до 10 раз). Например:
B C
Маша пришла
Маша ушла
Саша пришла
Саша ушла
На данный момент я разобрался, как посчитать, сколько раз упоминается имя в столбце B: ввожу имя в табличку, соседняя ячейка через СЧЁТЕСЛИ подсчитывает количество значений в диапазоне B:B и выдает число:
[ИМЯ][_6_] (потом я подкрашиваю эту ячейку через правила).
Возможно ли связать значения в столбцах B и C таким образом, чтобы в отдельной табличке искать, если ли в столбцах B и C в смежных ячейках определенное имя и определенное значение?
Например, в столбце B находить имя, определять номер ячейки и искать в ячейке этого номера столбца C заданное значение? Или каким-то другим образом?
С уважением, Женя.