Формулы массива в Excel — введение

Формулы массива 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 таблиц, которые являются основой для диаграмм, соответственно должны быть отсортированы по убыванию.

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

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

  1. Бывает, приходится использовать константы, типа {1;2;3;4;5}. Это проще, чем где-то его набивать и вставлять ссылку. Но надо учитывать, что если числа разделяются точкой с запятой, то это горизонтальный массив. А если двоеточием – {1:2:3:4:5} – то вертикальный.
  2. ФМ может быть применена как к ячейке, так и к диапазону. Соответственно, на выходе будет диапазон. Менять формулу в этом случае можно только во всем диапазоне. Как вводится и меняется формула – выделяется диапазон, и забивается формула, завершается CTRL+Shift+Enter.
  3. Отличительным признаком ФМ являются фигурные скобки. Они видны, пока не перейдете в режим редактирования ячейки. Как-то непривычно порой разбирая формулы, видеть, что там где должна быть ссылка на ячейку, стоит диапазон – ЕСЛИ(А1:А5>0;1;0). Меня это сильно удивляло, как так :) .

Кто еще считает, что можно нормально обойтись и без ФМ, напишите в комментариях к статье, сможете ли реализовать расчет цены остатков на складе по методу ФИФО/ЛИФО.

Эксель Практик
«Глаза боятся, а руки делают»

P.S. Понравилась статья? Подпишитесь на рассылку в правой части страницы (Бесплатный курс "Топ-10 инструментов Excel") и будьте в курсе новых событий.

Формулы массива в Excel — введение: 5 комментариев

  1. vikttur

    Если осилю весь текст, может, больше замечаний не будет :)
    Пока — о замеченной грубой ошибке.

    Формула массива делает все без дополнительных телодвижений:
    =СУММ(НАИБОЛЬШИЙ(B3:B25;{5;6;7}))

    Обрабатывает массив, да. Но не формула массива. В формуле применен массив констант.
    Обязательное условие формулы массива — ввод ее с помощью Ctrl+Shift+Enter и обрамление фигурными скобками.
    {=A1} — формула массива! Бесполезно? Конечно. Но ФМ.

    =СУММ(НАИБОЛЬШИЙ(B3:B25;СТРОКА(5:7))) — а эта формула без введения с помощью трех клавиш покажет ошибочный результат, ее нужно водить как формулу массива.

  2. admin Автор записи

    Технически со всем согласен :) Но статья не академическая, а для рядовых пользователей и сознательно взят такой стиль.

  3. vikttur

    А Баба Яга против :)
    Не нужно запутывать рядовых пользователей.

    формулы массива… в качестве аргументов там, где обычная функция использует отдельное значение, формула массива может использовать диапазон
    вообще-то есть функция СУММПРОИЗВ

    {=СУММ(массив1*массив2)}
    =СУММПРОИЗВ(массив1;массив2)
    Результат работы одинаков, обрабатываются одинаковые диапазоны, но вторая — НЕ формула массива (и, кстати, работает быстрее процентов на 30).

    Обработка массивов и формулы массива — это нужно разграничивать.

    Предлагаю доработать статью с учетом замеченной ошибки. Комментарии можно удалить, не обижусь )

  4. admin Автор записи

    Нет, не удалю. Благодарен вам, что вы это делаете. И постараюсь сделать так, чтобы и стиль остался и ошибки ушли.

  5. Женя

    Здравствуйте! Не уверен, что пишу под нужной статьей)
    Задача такова: в столбце B даны имена, в столбце C неуникальные текстовые значения (повторяются для каждого имени, таким образом имя дублируется до 10 раз). Например:
    B C
    Маша пришла
    Маша ушла
    Саша пришла
    Саша ушла
    На данный момент я разобрался, как посчитать, сколько раз упоминается имя в столбце B: ввожу имя в табличку, соседняя ячейка через СЧЁТЕСЛИ подсчитывает количество значений в диапазоне B:B и выдает число:
    [ИМЯ][_6_] (потом я подкрашиваю эту ячейку через правила).
    Возможно ли связать значения в столбцах B и C таким образом, чтобы в отдельной табличке искать, если ли в столбцах B и C в смежных ячейках определенное имя и определенное значение?
    Например, в столбце B находить имя, определять номер ячейки и искать в ячейке этого номера столбца C заданное значение? Или каким-то другим образом?
    С уважением, Женя.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>