Глава 15. Извлечение данных на основе критериев

Рубрика: 7. Полезняшки Excel

Это глава из книги: Майкл Гирвин. Ctrl+Shift+Enter. Освоение формул массива в Excel. [1]

Предыдущая глава                          Оглавление                               Следующая глава

Извлечение данных (записей) из таблицы, списка или базы данных

Извлечение данных из набора данных на основе критериев И, ИЛИ – типичная задача для Excel. Вы можете решить ее, используя один из следующих методов:

  • Фильтр
  • Расширенный фильтр
  • Обычная формула в специально добавленном столбце
  • Формула массива на основе функций НАИМЕНЬШИЙ и ИНДЕКС
  • Формулу массива на основе функций АГРЕГАТ и ИНДЕКС

Рис. 15.1. Аккуратный набор данных

Рис. 15.1. Аккуратный набор данных

Скачать заметку в формате Word или pdf, примеры в формате Excel

Учитывайте следующие важные моменты в отношении этих методов:

  • Фильтр и расширенный фильтр, как правило, легче использовать, чем формулы, но они не дают моментального обновления, в отличие от формул.
  • Формулы обновляются моментально, как только в ячейке изменился критерий.
  • Обычная формула в специально добавленном столбце работает быстрее формулы массива
  • Мы не рассматриваем решения на основе кода VBA, хотя они могут быть весьма эффективными.

Использование Фильтра (Автофильтра) для извлечения данных

Опция Фильтр (также известная как Автофильтр) наиболее проста в использовании. Если у вас аккуратный набор данных с заголовками столбцов (рис. 15.1), вы можете включить фильтр, встав на любую ячейку области, и пройдя по меню ДАННЫЕ –> Фильтр, или нажав Ctrl+Shift+L. Теперь можно использовать стрелочки вверху каждого столбца для фильтрации данных. Как только набор данных фильтруется, можно выделить и скопировать видимые ячейки в другое место того же или нового листа (рис. 15.2–15.4), или в новую книгу.

На рис. 15.2 данные извлечены по следующим критериям: Дата >=01.06.12, Дата <=31.05.13, Регион = West. Для того чтобы выполнить фильтрацию:

  1. Щелкните стрелку на поле Дата, выберите Фильтр по дате –> Между…, введите или выберите из календаря требуемые даты.
  2. Щелкните стрелку на поле Регион и оставьте галку только напротив West.

Рис. 15.2. Результат фильтрации по трем И критериям

Рис. 15.2. Результат фильтрации по трем И критериям

На рис. 15.3 показан результат извлечения записей по критерии ИЛИ: регион = West либо регион = Est.

Рис. 15.3. Результат фильтрации по ИЛИ критерию

Рис. 15.3. Результат фильтрации по ИЛИ критерию

На рис. 15.4 показаны записи, извлеченные с помощью нескольких И критериев и одного ИЛИ: Дата >=01.06.12 И Дата <=31.05.13 И (регион = West ИЛИ регион = Est). Обратите внимание, что ИЛИ критерий относится к одному и тому же столбцу.

Рис. 15.4 Результат фильтрации с тремя И критериями, где третий И критерий включает в себя ИЛИ

Рис. 15.4 Результат фильтрации с тремя И критериями, где третий И критерий включает в себя ИЛИ

Если ИЛИ критерий должен относится к разным столбцам, опция Фильтр не поможет. Используйте вспомогательный столбец с формулой. Примените фильтр к вспомогательному столбцу, чтобы показать только значения ИСТИНА (рис. 15.5).

Рис. 15.5 Вспомогательный столбец помогает отфильтровать по критерию ИЛИ, относящемуся к двум столбцам

Рис. 15.5 Вспомогательный столбец помогает отфильтровать по критерию ИЛИ, относящемуся к двум столбцам

Эти примеры показывают, насколько легко и быстро можно применить опцию Фильтр. Если вам не нужно мгновенное обновление извлеченных данных при смени критериев отбора, Фильтр является предпочтительным инструментом.

Использование Расширенного фильтра для извлечения записей

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

Чтобы применить Расширенный фильтр:

  1. Для Расширенного фильтра, столбцы должны быть озаглавлены, а область критериев – содержать те же заголовки и сами критерии. При этом, И критерии должны располагаться в одной строке, а ИЛИ критерии – в различных (рис. 15.6-а).
  2. Чтобы открыть диалоговое окно Расширенный фильтр, пройдите по меню ДАННЫЕ –> Сортировка и фильтр –> Дополнительно, или нажмите Alt, и не отпуская нажмите последовательно Ы, Л
  3. Заполните диалоговое окно Расширенный фильтр, как показано на рис. 15.6-б.
  4. Кликните Ok. Имена полей и записи извлекаются, и записываются в указанное место. При это создаются два имени, которые можно увидеть в Диспетчере имен. Последний можно открыть, нажав Ctrl+F3 (рис. 15.6-в). Благодаря созданию имен, при последующих запусках диалогового окна Расширенный фильтр, параметры сохраняются. Поэтому вы можете просто изменить критерии и повторно запустить Расширенный фильтр.
  5. Если вы хотите сохранить предыдущие результаты, при каждом новом запуске Расширенного фильтра просто измените ячейку в поле Поместить результат в диапазон.

Рис. 15.6. Расширенный фильтр для извлечения данных с И критериями

Рис. 15.6. Расширенный фильтр для извлечения данных с И критериями; при запуске Расширенного фильтра определяются два имени: Извлечь, Критерии

На рис. 15.8–15.12 приведены примеры использования Расширенного фильтра.

Рис. 15.7. Расширенный фильтр для извлечения данных с ИЛИ критерием

Рис. 15.7. Расширенный фильтр для извлечения данных с ИЛИ критерием

Рис. 15.8. Расширенный фильтр для извлечения данных с И и ИЛИ критериями; ИЛИ критерий применен к одному столбцу

Рис. 15.8. Расширенный фильтр для извлечения данных с И и ИЛИ критериями; ИЛИ критерий применен к одному столбцу

Рис. 15.9. Расширенный фильтр для извлечения данных с И и ИЛИ критериями; ИЛИ критерий применен к двум столбцам

Рис. 15.9. Расширенный фильтр для извлечения данных с И и ИЛИ критериями; ИЛИ критерий применен к двум столбцам

Рис. 15.11. Уникальный список из одного столбца

Рис. 15.10. Расширенный фильтр может использовать логические формулы в качестве критерия. Обратите внимание, что критерии в поле Диапазон условий указан В6:В7. Обычно этот диапазон включает в себя имя поля из набора данных и критерий. Но только не в этом случае. Используя логическую формулу, ячейку В6 следует оставить пустой или поместить текст, не совпадающий ни с одним из имен полей. В ячейке В7 следует разместить логическую формулу. Это пример извлекает те же данные, как и на рис. 15.9.

Рис. 15.11. Уникальный список из одного столбца

Рис. 15.11. Если вы хотите извлечь уникальный список из одного столбца, вы можете это сделать с помощью Расширенного фильтра. Отметьте флажок Только уникальные записи. Этот трюк всегда требует, чтобы, во-первых, имя поля было включены в Исходный диапазон, и во-вторых, чтобы имя извлекаемых данных (ячейка F3) называлось также. Поэкспериментируйте с извлечением уникальных регионов.

Примеры показывают, что Расширенный фильтр дает вам больше возможностей фильтрации чем Фильтр:

  • Вы можете видеть критерии в ячейках (в Фильтре они скрываются за выпадающими стрелками Автофильтра).
  • Вы можете обрабатывать сложные И и ИЛИ критерии.
  • Вы можете использовать формулы в качестве критерия.
  • Вы можете получить уникальный список.

Фильтр и Расширенный фильтр очень просты в использовании, и будут использоваться довольно часто. Но иногда требуется немедленное обновление формул. К сожалению, за оперативность приходится расплачиваться сложностью.

Формулы для извлечения записей

При извлечении данных из таблицы, вы фактически осуществляете поиск. Стандартные функции поиска в Excel, такие как ИНДЕКС, ПОИСКПОЗ и ВПР прекрасно себя зарекомендовали, но они не справляются с дублями. Как показано на рис. 15.12, если цель состоит в извлечении записей по трем критериям, итогом должны стать две выделенные записи. Для вертикальной таблицы, формулы подстановки легко извлекают данные из нескольких столбцов; но не справляются с извлечением данных из нескольких строк.

Если вам нужна формула, чтобы извлечь записи, у вас есть два основных варианта:

  • Использовать стандартную функцию поиска на основе вспомогательного столбца. Последний содержит формулу, которая, например, выдает числа: 1, 2, 3, … для «правильных» записей. Как только критерии поменяются, формула тут же отработает изменения, и снова находит записи, соответствующие критериям. Эти последовательные цифры решают проблему дублей, потому что есть уникальный идентификатор для каждой найденной записи. Вспомогательный столбец служит в качестве столбца подстановки, что позволяет стандартным функциям поиска выполнять свою работу.
  • Использовать формулы массива на основе полного набора данных. Эти формулы являются автономными и не требуют дополнительного столбца. Для этих формул, вы должны создать внутри формулы массив относительных позиций для записей, которые соответствуют критериям. Эти формулы позволяют извлекать записи при наличии дублей.

Рис. 15.12. Должны быть извлечены две записи

Рис. 15.12. Должны быть извлечены две записи; стандартные функции поиска замучаются с дублями (строки раскрашены с помощью условного форматирования, что можно подробнее изучить на соответствующем листе приложенного Excel-файла)

Использование вспомогательного столбца, И критерия и функций ИНДЕКС / ПОИСКПОЗ

На рис. 15.13 представлены три критерия, собранные во вспомогательном столбце с помощью функции И. Этот столбец будет служить в качестве столбца подстановки для функции ИНДЕКС.

Рис. 15.13. Первая часть формулы вспомогательного столбца включает функцию И

Рис. 15.13. Первая часть формулы вспомогательного столбца включает функцию И; чтобы увеличить картинку, кликните на ней правой кнопкой мыши и выберите опцию Открыть картинку в новой вкладке

Проблема с использованием функции И заключается в том, что она возвращает лишь два значения: ИСТИНА и ЛОЖЬ. Т.е., вы вернулись к проблеме дублей в столбце подстановки. Вы бы хотели, чтобы первая ИСТИНА (в ячейке E14) имела номер 1, а вторая (в ячейке Е17) – номер 2. Этого можно достичь путем внесения изменений в формулу. Как показано на рис. 15.14, вы помещаете функцию И в качестве аргумента число1 функции СУММ, а в качестве аргумента число2 вы помещаете относительную ссылка на одну ячейку выше.

Рис. 15.14. Финальный вид формулы вспомогательного столбца

Рис. 15.14. Финальный вид формулы вспомогательного столбца

Вот как работает эта формула:

  • Булевы (логические) значения ИСТИНА и ЛОЖЬ, возвращаемые функцией И, будут преобразованы соответственно в единицы и нули, внутри функции СУММ.
  • Функция СУММ игнорирует текст, и поэтому относительная ссылка на ячейку Е7 в аргументе число2, обнаружив текст Вспомогательный, вернет ноль.
  • Когда формула дойдет до ячейки E14, значение на одну ячейки выше будет 0, а значение в самой ячейке Е14 будет 1. Итого = 1.
  • В ячейках E15 и E16, формула будет добавлять 0 к предыдущему значению, и по-прежнему возвращать 1.
  • В ячейке E17, формула сложит 1 (из предыдущей ячейки) и 1 (ИСТИНА). Итого = 2.
  • Дубли не составят проблемы при использовании стандартной функции поиска, т.к., вы можете задать Точное совпадение и, следовательно, все повторяющиеся значения кроме первого будут проигнорированы.
  • Выполнив Точное совпадение, вы не только игнорируете дубли, вы также косвенно создаете столбец с уникальными идентификаторами: 1, 2 и т.д., который позволит функции ВПР извлечь нужные данные.

Вы можете добавить вспомогательную ячейку для подсчета общего числа записей, которые требуется извлечь (рис. 15.15). Это можно сделать, например, используя функцию МАКС в ячейке Н6. Вспомогательная ячейка добавляет наглядности и ускоряет работу Excel (если вы поместите фрагмент МАСК($Е$8:$Е$17) внутрь окончательной формулы поиска для извлечения данных, этот расчет будет выполняться много раз). Вы можете использовать вспомогательную ячейку (строку или столбец) всякий раз, когда у вас есть элемент формулы, многократно используемый в другой формуле.

Рис. 15.15. Ячейка Н6 с помощью функции МАКС вычисляет количество записей

Рис. 15.15. Ячейка Н6 с помощью функции МАКС вычисляет количество записей; это еще один пример вспомогательной ячейки

Вы можете начать основную формулу с функции ЕСЛИ (рис. 15.16). Поскольку формула должна предусматривать различное число извлекаемых записей, аргумент лог_выражение проверяет, не превышает ли номер записи (1 в ячейке $G12) общее число «правильных» записей в ячейке $Н$6. Если аргумент лог_выражение принимает значение ИСТИНА, в ячейку помещается пустая текстовая строка. Если лог_выражение принимает значение ЛОЖЬ, используется стандартная функция поиска.

Рис. 15.16. Функция ЕСЛИ предпочтительнее для запуска формулы поиска, по сравнению с функцией ЕСЛИОШИБКА

Рис. 15.16. Функция ЕСЛИ предпочтительнее для запуска формулы поиска, по сравнению с функцией ЕСЛИОШИБКА (первая функция работает быстрее; подробнее об этом см. Глава 9. Знакомство с функциями массива. ТРАНСП, МОДА.НСК и ТЕНДЕНЦИЯ)

На рис. 15.17 формула извлечения данных приведена в финальном виде. Обратите внимание:

  • Диапазон изменения аргумента массив функции ИНДЕКС представлен смешанной ссылкой – А$8:A$17; заблокирована только ссылка на строки (представлена в виде абсолютной ссылки), что позволяет скопировать формулу право вдоль строки; формула в ячейке I12 будет ссылаться на диапазон В$8:В$17. А при копировании формулы вниз вдоль столбца ссылка заблокирована. Так что в ячейке Н13 формула по-прежнему будет ссылаться на диапазон А$8:A$17.
  • Аргумент искомое_значение функции ПОИСКПОЗ содержит искомое значение – номер 1, в ячейке $G Аналогично, смешанная ссылка позволяет при копировании по строке сохранять ссылку на ячейку $G12, а при копировании по столбцу перейти к ссылке на ячейку $G13, то есть, перейти к номеру 2.
  • Аргумент просматриваемый_массив функции ПОИСКПОЗ включает абсолютную ссылку, так что из любой ячейки мы обратимся к одному и тому же диапазону $E$8:$E$17.
  • Аргумент тип_сопоставления функции ПОИСКПОЗ равен нулю, так что выполняется поиск точного совпадения.

Рис. 15.17. Окончательная формула поиска

Рис. 15.17. Окончательная формула поиска

Формула, введенная в ячейку Н12 копируется в диапазоне Н12:К17.

Примечание: когда вы копируете ячейку, копируются и формулы, и форматирование. Чтобы избежать копирования форматирования чисел, после копирования воспользуйтесь опцией смарт-тега Заполнить только значения:

Рис. 15.17а. Копировать только значения

Вы скопировали формулу вниз до строки 17. Но как далеко вниз вы должны скопировать формулу извлечения данных? Скопируйте с запасом, чтобы предусмотреть потенциально большое число извлеченных записей.

Рис. 15.18. При изменении критериев формулы отработали мгновенно

Рис. 15.18 показывает, в чем прелесть использования формул вместо Фильтра или Расширенного фильтра: при изменении критериев (дат), формулы отработали мгновенно. Рис. 5.19 показывает, как можно изменить формулу, если вы не хотите использовать столбец номеров (G). Дважды замените ссылку $G12 на фрагмент ЧСТРОК(H$12:H12).

Рис. 15.18. При изменении критериев формулы отработали мгновенно

Рис. 15.18. При изменении критериев формулы отработали мгновенно

Рис. 15.19. Эта формула будет работать без столбца с номерами

Рис. 15.19. Эта формула будет работать без столбца с номерами

В следующих разделах мы рассмотрим еще три примера того, как использовать вспомогательные столбцы для извлечения данных.

Использование вспомогательного столбца, ИЛИ критерия и ВПР в качестве функции поиска

На рис. 15.20 вспомогательный столбец расположен первым, так что вы можете использовать функцию ВПР. Обратите внимание на использование функции ЧИСЛОСТОЛБ в аргументе номер_столбца функция ВПР для увеличения номера 1, 2, 3, …, при копировании формулы вправо вдоль строки.

Рис. 15.20. Использование вспомогательного столбца, ИЛИ критерия, и ВПР в качестве функции поиска

Рис. 15.20. Использование вспомогательного столбца, ИЛИ критерия и ВПР в качестве функции поиска; формула в ячейке G10 показана в строке формул

Примечание: если все критерии ИЛИ расположены в одном столбце (в примере выше – в столбце В, в диапазоне В3:В4), вы можете использовать одну из двух конструкций: (1) функции ЕЧИСЛО + ПОИСКПОЗ; (2) функцию ИЛИ. Если критериев больше двух, первый вариант предпочтительнее. Если критериев ровна два, второй вариант может быть более наглядным. Во втором случае формула в А10 имеет вид:

=СУММ(ИЛИ(D10=$B$3;D10=$B$4);А9)

Использование вспомогательного столбца, критериев И и ИЛИ, функций ИНДЕКС и ПОИСКПОЗ для извлечения части столбцов данных

На рис. 15.21 показан пример использования вспомогательного столбца для извлечения данных из столбцов Дата и Штуки. Заметьте, что функция ИНДЕКС выполняет поиск (с помощью функции ПОИСКПОЗ), как по строкам, так и по столбцам.

Рис. 15.21. Критерии И и ИЛИ, в двух-координатном поиске для извлечения части столбцов по их названию

Рис. 15.21. Критерии И и ИЛИ, в двух-координатном поиске для извлечения части столбцов по их названию; формула в ячейке G10 показана в строке формул

Использование вспомогательного столбца, критериев И и ИЛИ для извлечения данных и представления их в горизонтальном виде

На рис. 15.22 показано, как преодолеть несоответствие между текстовым названием месяца, как критерия (ячейка С3), и порядковым номером даты в поле Дата (например, в ячейке А10 хранится значение 41484). Также показано, что данные могут быть извлечены из вертикальной таблицы и отображаться горизонтально. Это выполняется с помощью функции ЧИСЛСТОЛБ в аргументе лог_выражение функции ЕСЛИ и в аргументе искомое_значение функции ПОИСКПОЗ.

Рис. 15.22. Данные извлекаются из вертикальной таблицы и отображается горизонтально

Рис. 15.22. Критерии И и ИЛИ, и несоответствие между текстовым названием месяца, как критерия, и порядковым номером даты в поле Дата. Данные извлекаются из вертикальной таблицы и отображается горизонтально с помощью двух-координатного поиска и функции ЧИСЛСТОЛБ. Формула в ячейке G10 показана в строке формул

Мы рассмотрели, как применять вспомогательные столбцы. Однако, если вспомогательные столбцы не могут быть использованы, нужно переходить к формулам массива.

Создание массива относительных позиций отобранных записей внутри формулы

Извлечение данных с помощью формулы массива основано на создании массива относительных позиций отобранных записей внутри формулы. На рис. 15.23 видно, что на основе критериев И установлено соответствие записей критериям в относительных позициях 7 и 10 (внутри 10 строк массива данных; выделены желтым). Поскольку вы не можете использовать вспомогательный столбец, вы должны рассчитать эти номера 7 и 10 внутри формулы. Затем номера 7 и 10 будут использованы в аргументе номер_строки функции ИНДЕКС. Ранее, вы уже сталкивались с элементами, необходимыми для создания относительной позиции внутри массива:

Если вы используете Excel 2007 или более раннюю версию, вы можете создать массив с помощью функций НАИМЕНЬШИЙ и ЕСЛИ, что потребует нажатия Ctrl+Shift+Enter для ввода формулы. Если вы используете Excel 2010 или более позднюю версию, вы можете использовать функцию АГРЕГАТ и логическое деление, а значит формула не потребует нажатия Ctrl+Shift+Enter.

Рис. 15.23. Искомые записи находятся в относительных позициях 7 и 10

Рис. 15.23. Искомые записи находятся в относительных позициях 7 и 10

Формулы массива для извлечения данных с И критерием и функциями НАИМЕНЬШИЙ, ЕСЛИ, ИНДЕКС

Как показано на рис. 15.24, вы начинаете написание формулы в ячейке F12 с трех функций ЕСЛИ (вложенных друг в друга) в аргументе массив функции НАИМЕНЬШИЙ. Аргументы лог_выражение трех функций ЕСЛИ являются фильтром для отбора относительно позиций строк, отвечающих всем критериям. Как показано на рис. 15.25, вы помещаете элемент формулы для создания массива относительных позиций отобранных записей в аргумент значение_если_истина функции ЕСЛИ и затем закрываете три ЕСЛИ тремя закрывающими скобками, оставляя все аргументы значение_если_ложь пустыми.

Примечание: элемент формулы для создания массива относительных позиций, может использовать любой из столбцов в наборе данных. В нашем примере используется столбец Дата: СТРОКА($A$11:$A$20)-СТРОКА($A$11)+1 – но вы так же можете использовать столбец Регион, Клиент или Штук. Например, СТРОКА($В$11:$В$20)-СТРОКА($В$11)+1.

Рис. 15.24. Три ЕСЛИ внутри функции НАИМЕНЬШИЙ, чтобы обработать три  критерия

Рис. 15.24. Три ЕСЛИ внутри функции НАИМЕНЬШИЙ, чтобы обработать три критерия

Рис. 15.25. Элемент формулы для создания массива относительных позиций отобранных записей

Рис. 15.25. Элемент формулы для создания массива относительных позиций отобранных записей располагается в аргументе значение_если_истина функции ЕСЛИ

Если, находясь в ячейке F12, вы в строке формул кликните внутри функции НАИМЕНЬШИЙ, то появится подсказка НАИМЕНЬШИЙ(массив; k). Если теперь кликнуть на первом аргументе функции – массив, то выделится весь первый аргумент (рис. 15.26 а). Нажмите F9, и вы увидите значения массива относительных позиций отобранных записей на фоне значений ЛОЖЬ (рис. 15.26 б). Чтобы отменить перевод формулы в значения, нажмите Ctrl+Z.

Рис. 15.26. Выделите фрагмент формулы, нажмите F9

Рис. 15.26. Выделите фрагмент формулы, нажмите F9 и вы увидите значения массива относительных позиций отобранных записей на фоне значений ЛОЖЬ

Зачем мы помещаем массив относительных позиций отобранных записей внутрь функции НАИМЕНЬШИЙ? Дело в том, что НАИМЕНЬШИЙ извлекает сначала 7, а затем 10, а скопировав формулу вниз по столбцу, можно подставить эти цифры в аргумент номер_строки функции ИНДЕКС. Когда мы помещаем нумератор ЧСТРОК(F$12:F12) в аргумент k (рис. 15.27), функция НАИМЕНЬШИЙ возвращает правильное относительное положение в аргумент номер_строки функции ИНДЕКС. Не забудьте, что для ввода этой формулы (точнее фрагмента) требуется нажать Ctrl+Shift+Enter. Результат копирования этой формулы в диапазон F12:I17 показан на рис. 15.28.

Рис. 15.27. Фрагмент формулы, последовательно извлекающий номера строк, отвечающих критериям

Рис. 15.27. Фрагмент формулы, последовательно извлекающий номера строк, отвечающих критериям

Рис. 15.28. Только две записи соответствуют критериям

Рис. 15.28. Только две записи соответствуют критериям, протягивание формулы далее вниз выдает ошибку

Как показано на рис. 15.29, функция НАИМЕНЬШИЙ, возвращающая относительную позицию отобранных строк, располагается в аргументе номер_строки функции ИНДЕКС.

Рис. 15.29. Функция НАИМЕНЬШИЙ располагается в аргументе номер_строки функции ИНДЕКС

Рис. 15.29. Функция НАИМЕНЬШИЙ располагается в аргументе номер_строки функции ИНДЕКС

Как показано на рис. 15.30, если ввести этот фрагмент формулы с помощью Ctrl+Shift+Enter в ячейку F12 и затем скопировать на весь диапазон, вы получите извлеченные записи. Ошибка #ЧИСЛО! вызвана тем, что только две записи соответствуют критериям отбора. Для третей и четвертой строк не нашлось данных.

Рис. 15.30. Только две записи являются релевантными

Рис. 15.30. Только две записи являются релевантными

Рис. 15.31 показывает, как можно использовать функцию ЕСЛИ для замены ошибочного значения на нулевую текстовую строку. В целом формула выполняет большую работу, поэтому, чтобы не делать ее зря (и не замедлять расчеты), начните с проверки и подстановки нулевой текстовой строки.

Рис. 15.31. Используйте функцию ЕСЛИ для скрытия значений ошибок

Рис. 15.31. Используйте функцию ЕСЛИ для скрытия значений ошибок

Вы можете ввести построенную формулу в ячейку F12 нажав Ctrl+Shift+Enter (рис. 15.32), а затем скопировать ее на весь диапазон.

Рис. 15.32. Извлечены две записи

Рис. 15.32. Извлечены две записи

Рис. 15.33. Если критерии отбора изменились, формула мгновенно обновится

Рис. 15.33. Если критерии отбора изменились, формула мгновенно обновится; изменились даты

Формулы массива для извлечения данных с использованием функции АГРЕГАТ

Если у вас Excel 2010 или более поздняя версия, можно использовать функцию АГРЕГАТ, что позволит избежать использования Ctrl+Shift+Enter для ввода формулы. Как вы узнали в главах 4 и 11, можно использовать булеву алгебру для фильтрации значений внутри аргумента массив функции АГРЕГАТ. В этом примере отфильтрованным значениям будут сопоставлены относительные позиции.

Как показано на рис. 15.37, функция АГРЕГАТ расположена в аргументе номер_строки функции ИНДЕКС. Вы используете 15 в аргументе номер_функции АГРЕГАТ, что соответствует функции НАИМЕНЬШИЙ. Вы используете 6 в аргументе параметры, поручая функции АГРЕГАТ игнорировать ошибки. Вы строите массива булевых значений в аргументе массив функции АГРЕГАТ. Обратите внимание, что в числителе выражение в скобках создает массив относительных позиций – СТРОКА($A$11:$A$20)-СТРОКА($A$11)+1. В знаменателе размещены перемноженные три критерия – ($A$11:$A$20>=$B$3)*($A$11:$A$20<=$C$3)*($B$11:$B$20=$D$3).

Рис. 15.37. Функция АГРЕГАТ в аргументе номер_строки функции ИНДЕКС

Рис. 15.37. Функция АГРЕГАТ в аргументе номер_строки функции ИНДЕКС

Как показано на рис. 15.38, если вычислить числитель, вы получите ряд натуральных чисел, а в знаменателе – последовательность нулей и единиц. Знаменатель вернет единицу только если все три критерия выполнены.

Рис. 15.38. Аргумент массив функции Агрегат

Рис. 15.38. Аргумент массив функции Агрегат

Если продолжить вычисления (рис. 15.39), вы получить массив, включающий номера отобранных записей и значений ошибок #ДЕЛ/0! Ошибки фильтруются (игнорируются) аргументом 6 функции АГРГЕГАТ.

Рис. 15.39.  Ошибки #ДЕЛ0! соответствуют записям, не удовлетворяющим критериям

Рис. 15.39.  Ошибки #ДЕЛ/0! соответствуют записям, не удовлетворяющим критериям

Как показано на рис. 15.40, вы можете закончить формулу, поместив счетчик – ЧСТРОК(F$12:F12) в качестве аргумента k функции АГРЕГАТ (не забывайте, что в данном примере она работает как функция НАИМЕНЬШИЙ). В диапазоне F12:I12 k принимает значение 1, в диапазоне F12:I12 – 2, далее не актуально, так как k становится больше значения в ячейке А7.

Рис. 15.40. Счетчик в аргументе k функции АГРЕГАТ

Рис. 15.40. Счетчик в аргументе k функции АГРЕГАТ

Финальная формула не требует ввода с помощью Ctrl+Shift+Enter. На рис. 15.41 и 15.42 показано, что вы можете изменить критерии и формулы мгновенно обновятся.

Рис. 15.41. Извлечены две записи

Рис. 15.41. Извлечены две записи

Рис. 15.42. Если критерии отбора изменились, формула мгновенно обновится; изменились даты

Рис. 15.42. Если критерии отбора изменились, формула мгновенно обновится; изменились даты

Возврат нескольких элементов на основе одного значением поиска

Стандартные функции поиска в Excel – ВПР, ПОИСКПОЗ и ИНДЕКС – если вы строите формулу массива, не могут возвращать несколько элементов с одним значением поиска. Как показано на рис. 15.44, вам необходимо выбрать название группы (Cascade в ячейки D3), найти все вхождения в базу данных (А2:В52), соответствующие выбранной группе, и вернуть связанные фамилии в поле Сотрудники (D5:D25). Можно использовать формулу на основе функций АГРЕГАТ (не требует ввода Ctrl+Shift+Enter) или НАИМЕНЬШИЙ (требует ввода Ctrl+Shift+Enter):

=ЕСЛИ(ЧСТРОК(D$6:D6)>E$3;"";ИНДЕКС($A$3:$A$52;АГРЕГАТ(15;6;(СТРОКА($A$3:$A$52)-СТРОКА(A$3)+1)/($B$3:$B$52=D$3);ЧСТРОК(D$6:D6))))

{=ЕСЛИ(ЧСТРОК(D$6:D7)>E$3;"";ИНДЕКС($A$3:$A$52;НАИМЕНЬШИЙ (ЕСЛИ($B$3:$B$52=D$3;СТРОКА($A$3:$A$52)-СТРОКА(D$3)+1);ЧСТРОК(D$6:D7))))}

Рис. 15.44 показан пример формулы на основе функции АГРЕГАТ. Формулу на основе НАИМЕНЬШИЙ можно найти во вложенном Excel-файле.

Рис. 15.44. Можно использовать функции НАИМЕНЬШИЙ или АГРЕГАТ в аргументе номер_строки функции ИНДЕКС

Рис. 15.44. Можно использовать функции НАИМЕНЬШИЙ или АГРЕГАТ в аргументе номер_строки функции ИНДЕКС

В качестве альтернативы использованию формулы массива для извлечения сотрудников по имени группы можно воспользоваться обычной ВПР, предварительно создав вспомогательный столбец (рис. 15.45). Обратите внимание на формулу в А3, а также на то, как представлено ее описание в ячейке А1 (его можно видеть в строке формул).

Рис. 15.45. Используя вспомогательный столбец можно извлечь данные обычной ВПР

Рис. 15.45. Используя вспомогательный столбец можно извлечь данные обычной ВПР

Извлечение данных с ИЛИ критерием из одного столбца: Булева алгебра или ПОИСКПОЗ?

Этот пример является продолжением предыдущего примера. После извлечения всех имен сотрудников выбранной группы, вы можете использовать их в ИЛИ критерии, для извлечения части записей из набора данных. На рис. 15.46 обратите внимание на следующие:

  1. Критерии ИЛИ находятся в диапазоне I6:I
  2. Для каждой записи в наборе данных, формула должна задать вопрос, входит ли имя в диапазон критериев.
  3. Вы используете ЕЧИСЛО/ПОИСКПОЗ вместо 16 булевых проверок.

Рис. 15.46. Для извлечения данных с большим числом ИЛИ критериев в одном столбце

Рис. 15.46. Для извлечения данных с большим числом ИЛИ критериев в одном столбце используйте комбинацию функций ЕЧИСЛО/ПОИСКПОЗ; формула в ячейке F8 показана в строке формул

Вы также можете использовать альтернативную формулу в ячейке F8 которая не требует ввода Ctrl+Shift+Enter, так как основана на функции АГРЕГАТ):

=ЕСЛИ(ЧСТРОК(F$8:F8)>$G$5;"";ИНДЕКС(B$5:B$936;АГРЕГАТ(15;6;(СТРОКА($B$5:$B$936)-СТРОКА($B$5)+1)/ЕЧИСЛО(ПОИСКПОЗ($B$5:$B$936;$I$6:$I$21;0));ЧСТРОК(F$8:F8))))

Извлечение данных с ИЛИ критериями в более чем одном столбце

На рис. 15.49 задача – извлечь записи, либо региона West, либо клиентов K с числом штук от 400 до 1300. Обратите внимание: (1) это двух-координатный поиск, где функция НАИМЕНЬШИЙ возвращает массив относительных позиций строк в аргумент номер_строки функции ИНДЕКС, а ПОИСКПОЗ возвращает относительную позицию столбцов в аргумент номер_столбца функции ИНДЕКС; (2) совокупность ИЛИ критериев может вернуть 1 или 2, но это не вызовет проблем, поскольку аргумент лог_выражение любое ненулевое число, интерпретирует как ИСТИНА.

Рис. 15.49. Критерии ИЛИ, работающие на разных столбцах + И критерии

Рис. 15.49. Критерии ИЛИ, работающие на разных столбцах + И критерии

Извлечение данных с И и ИЛИ критериями, и чисел, делящихся на 5

На рис. 15.51 задача – извлечь записи, либо региона West, либо клиентов K, с числом штук кратным 5. Обратите внимание на две особенности использования Булевой алгебры: (1) функция ОСТАТ возвращает 0 для значений кратных 5. Если ОСТАТ равен нулю, фрагмент формулы ОСТАТ($D$11:$D$20;$C$5)=0 вернет ИСТИНА; (2) Булево ИЛИ отвечает на вопрос: «Больше нуля?»: ($B$11:$B$20=$B$5)+($C$11:$C$20=$B$7)>0. Нельзя просто сравнить с 1, так как вы можете получить два значения ИСТИНА из двух столбцов.

Рис. 15.51. Формула массива на основе функции АГРЕГАТ

Рис. 15.51. Формула массива на основе функции АГРЕГАТ для извлечения данных с И и ИЛИ критериями; использует функцию ОСТАТ для извлечения только количеств, делящихся на 5; формула в ячейке G11 отражена в строке формул

Сравнение двух списков

На рис. 15.53 задача – извлечь имена из Списка 2, которых нет в Списке 1. Функция ПОИСКПОЗ сравнивает два списка и возвращает ошибку #Н/Д, когда не находит нужного имени. С помощью функции ЕНД инвертируйте значение, чтобы получить ИСТИНУ, когда возвращается ошибка.

Рис. 15.53. Классическая формула сравнения двух списков

Рис. 15.53. Классическая формула сравнения двух списков; формула в ячейке Е9 отражена в строке формул

На рис. 15.54 решается обратная задача – извлечь имена, имеющиеся в обоих списках. Вместо ЕНД используется функция ЕЧИСЛО.

Рис. 15.54. Извлечение имен, имеющихся в обоих списках

Рис. 15.54. Извлечение имен, имеющихся в обоих списках

Вспомогательные столбцы в области извлеченных данных

На рис. 15.55 задача – извлечения все записи, относящиеся к регионам West и Est. Допустим вам нельзя создать вспомогательный столбец в области данных, но вы хотите уменьшить время расчета формулы, так что решаете создать вспомогательный столбце в области извлечения данных. Как обсуждалось выше, всякий раз, когда один и тот же элемент формулы многократно повторяется, вы можете удалить его из формулы и поместить в отдельную ячейку, так что он будет вычисляться только один раз (столбец L). В этом случае функция АГРЕГАТ (или НАИМЕНЬШИЙ) возвращает одну и ту же относительную позицию для всего ряда.

Рис. 15.55. Вспомогательный столбец

Рис. 15.55. Наиболее сложный и повторяющийся элемент формулы, вычисляющий относительную позицию удаляется из формулы и помещается во вспомогательный столбец; это ускоряет работу формулы; формула в ячейке L10 приведена в строке формул

Динамический диапазон внутри формулы массива для извлечения записей

Иногда при извлечении данных требуется, чтобы формула искала в новых записях, которые вносятся в таблицу позже. Для этих целей подойдет задание имени диапазона, и определение его на основе формулы динамического диапазона (подробнее см. Глава 13. Динамические диапазоны на основе функций ИНДЕКС и СМЕЩ). Рис. 15.56 показывает два динамических диапазона, созданных с помощью функции ИНДЕКС и «большого числа». На рис. 15.57 при извлечении данных в формуле используются эти два имени. Всего извлечено четыре записи. При добавлении двух новых записей (А13:С14), размер динамического диапазона увеличивается, и число извлеченных записей автоматически увеличивается до шести (рис. 15.59).

Рис. 15.56. Используйте функцию ИНДЕКС и «большое число», чтобы создать два динамических диапазона

Рис. 15.56. Используйте функцию ИНДЕКС и «большое число», чтобы создать два динамических диапазона

Рис. 15.57. Извлечение данных использует имена двух динамически определенных диапазонов

Рис. 15.57. Извлечение данных использует имена двух динамически определенных диапазонов

Рис. 15.59. При добавлении двух новых записей

Рис. 15.59. При добавлении двух новых записей (А13:С14), размер динамического диапазона увеличивается, и число извлеченных записей автоматически увеличивается до шести

Сравнение методов извлечения данных

В таблице сравниваются различные методы извлечения данных, описанные в этой главе.

Рис. 15.60

Некоторые ключевые понятия для формул извлечения данных

  • Используйте функцию ЕСЛИ вместо ЕСЛИОШИБКА; это сократит время расчетов.
  • Критерии И и ИЛИ могут быть созданы с помощью функции ЕСЛИ или Булевой алгебры.
  • Используя ИЛИ критерии помните: (1) для критериев в одном столбце функции ЕЧИСЛО + ПОИСКПОЗ предпочтительнее, чем Булевы операторы, так как работают быстрее и более наглядны; (2) для критериев в нескольких столбцах, не забудьте, что их таки несколько.
  • Есть два полезных способа думать о формулах извлечения данных: (1) извлекайте записи на основе набора критериев; (2) возвращайте нескольких элементов с помощью одного поиска.

[1] В 2013 г. я перевел 13 глав книги Гирвина, и остановился, так как статистика посещений показала, что тема не очень интересна читателям сайта (правда, были и положительные отзывы). Я возобновил перевод в связи любопытным вопросом в одном из комментариев.


Прокомментировать