Как найти массив в Excel

Сегодня я решил приступить к теме, которая будет совсем не для новичков, а именно к формулам массива. Знание формул массива и свободное оперирование ими является одним из признаков значительного уровня в Excel. Формулы массива свободно используются знатоками Excel, на форумах часто можно заметить, как мастера перед аудиторией щеголяют своим уровнем владения этим инструментом.

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

В чем же фишка? Уже из названия видно, что это формулы, которые работают с целыми диапазонами (то бишь массивами). Есть функции, которые работают даже с двумерными массивами, например ИНДЕКС. Но принцип действия гораздо проще, чем в ФМ.

В чем преимущества использования этих формул? Огласите списочек Я бы выделил следующие:

  1. Они позволяют решать сложные задачи там, где пасуют остальные средства Excel, кроме, пожалуй сводных таблиц. Несложные задачи лучше не решать, это как забивать кувалдой кнопку в доску, чтобы повесить объявление о субботнике (был недавно на работе ). Дело даже не в этом, а в том, что они жрут памяти больше обычных формул.
  2. Они позволяют обходиться одной формулой там, где в противном случае надо было бы делать макросы, плодить вспомогательные таблицы и т.д.

Давайте наконец перейдем от вступления к практике. Итак, сначала определимся с массивами. Массив, если по простому, это набор данных, который Excel’ем обрабатывается как один аргумент (параметр). Он может быть одномерным (горизонтальным или вертикальным) или двумерным.

Грубо говоря, наши формулы массива — это те же формулы, что мы используем повседневно, только в качестве аргументов там, где обычная функция использует отдельное значение, формула массива может использовать диапазон.

Первый пример, пока простенький.

У нас есть два диапазона. Мы хотим получить сумму их произведений. Это простой пример, который я обычно реализую следующим образом: добавляю третий столбец (или строчку), получаю произведения и суммирую весь столбец

Сделаем это через формулу массива: сначала мы определяем конечную функцию, это сумма.

=СУММ()

Затем определяем аргументы — а это для нас сумма массива, который сам по себе является произведением двух массивов, т.е.

=СУММ(массив1*массив2)

И последний, завершающий штрих, без которого Excel огрызнется «сам дурак!» — надо нажать в режиме редактирования CTRL+Shift+Enter.

Есть нюанс — вообще-то есть функция СУММПРОИЗВ, которая призвана давать сумму произведений массивов. Так что прежде чем использовать ФМ, надо посмотреть, может нам помогут функции СУММЕСЛИ и ей подобные?

Пример второй, сложноватый.

Найти сумму 5го, 6го и 7го наибольших элементов набора данных. Как это делается без ФМ: таблица сортируется по убыванию, берется дополнительный столбец, там проставляются порядковые номера и через функцию СУММЕСЛИ вытаскиваем сумму. Ну или еще каким-нибудь способом, которым это можно сделать. Не сильно проще.

Формула массива делает все без дополнительных телодвижений:

=СУММ(НАИБОЛЬШИЙ(B3:B25;{5;6;7}))

Понятно? Нет? Ну, давайте по шагам:

  1. Функция НАИБОЛЬШИЙ ищет те элементы, которые заданы (5,6 и 7-й) по порядку убывания. Результатом будет три числа, т.е. отдельный массив.
  2. Функция СУММ суммирует этот массив.

Не буду говорить за всех, я чаще всего использую в ФМ следующие функции:

ЕСЛИ

ИНДЕКС

ПОИСКПОЗ

СТРОКА (СТОЛБЕЦ)

НАИБОЛЬШИЙ (НАИМЕНЬШИЙ)

СУММ

И(ИЛИ)

Теперь, раз вы имеете малое представление о действии ФМ, скажу, для чего я лично использую их

  1. Для нахождения в какой-либо таблице ВСЕХ(!) элементов, отвечающих заданному условию.

Кто уже просматривал мой «Ускоренный практикум», помнит, что с помощью ФМ я выстраивал первую пятерку игроков, ранжируя по определенному признаку. Т.е., у меня например есть таблица банков, где один из признаков — количество банкоматов. В принципе, самое простое решение — использовать функцию НАИБОЛЬШИЙ, чтобы вытащить первую пятерку (десятку, двадцатку) значений по показателю банкоматов и затем с помощью функции ВПР найти соответствующие им названия банков. Но что делать, если значения повторяются? (Забудем на время про сводную таблицу.) Т.е., Альфабанк (не путать с реальным названием ) имеет одно и то же количество банкоматов, что и Бетабанк. ВПР в этом случае найдет только первого, того, кто в таблице стоит повыше. Т.е. будет в пятерке банков два Альфабанка.

  1. Для автоматической сортировки и фильтрации элементов.

Для решения такой же задачи стандартными средствами потребовалось бы все время пользоваться сортировкой или сводной таблицей. И в этом случае ссылаться на эту таблицу было бы не то что сложно, но немного муторно. А у меня например, есть в списке тех отчетов, что я составляю, рейтинг банков. Он составляется на ежемесячной основе и содержит 10-20 показателей — кредитный портфель, депозитный портфель, ROE, ROA и т.д. И по форме отчета есть 10-20 таблиц, которые являются основой для диаграмм, соответственно должны быть отсортированы по убыванию.

Само собой, мне, как и каждому экселисту, лень было делать эти сортировки, поэтому я просто настроил ФМ и теперь просто завожу данные, а они уже сами сортируются и выделяются нужными цветами.

Тонкости использования ФМ: