Извлечение данных excel в один

Сборка данных со всех листов книги в одну таблицу

Постановка задачи

Допустим, что у нас есть книга с большим количеством листов, где на каждом листе находится таблица с данными по сделкам в этом городе:

Исходный файл

Давайте будем исходить из следующих соображений:

  • Структура и столбцов на всех листах одинаковая.
  • Количество строк на всех листах разное.
  • Листы могут в будущем добавляться или удаляться.

Наша задача — собрать все данные со всех листов в одну таблицу, чтобы потом с ней работать (фильтровать, сортировать, построить сводную и т.д.) Сделать это можно разными способами, но самыми удобными будут, пожалуй, Power Query и макросы.

Способ 1. Сборка данных с листов с помощью Power Query

Если вы ещё не сталкивались в своей работе с Power Query, то очень советую копнуть в этом направлении. Использование этой бесплатной и уже встроенной по умолчанию в Excel надстройки, способно полностью перевернуть весь ваш процесс сбора и анализа данных, упростив всё в разы. С задачей сбора данных с листов Power Query справляется весьма успешно.

Шаг 1. Подключаемся к файлу

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

Если у вас Excel 2010-2013 и вы установили Power Query как отдельную надстройку, то откройте вкладку Power Query, если у вас Excel 2016 или новее, то вкладку Данные (Data). Нажмите кнопку Получить данные / Создать запрос — Из файла — Книга Excel (Get Data / New Query — From file — From Excel) и укажите наш файл с исходными листами:

Указываем файл

В появившемся окне Навигатора (Navigator) выберите слева любой лист и нажмите в правом нижнем углу кнопку Преобразовать данные (Transform Data) или Изменить (Edit):

Выбираем любой лист

Должно появиться окно редактора запросов Power Query, где отобразятся данные с выбранного листа. Поскольку нам нужен, на самом деле, не один лист, а все, то удалим в правой панели все шаги, кроме первого шага Источник (Source) используя крестик слева от названия шага:

Удаляем лишние шаги

То, что останется после удаления шагов — это список всех объектов, которые Power Query «видит» во внешних файлах, а это:

  • листы (Sheet)
  • «умные таблицы» (Table)
  • именованные диапазоны (Defined Name)
  • области печати (Print Area), которые, по сути, являются одним из видов именованного диапазона

Шаг 2. Отбираем нужные листы

В исходном файле может быть много всего лишнего, что нам не требуется собирать: случайные ненужные листы, служебные именованные диапазоны, побочные умные таблицы и т.п. Очень важно отфильтровать этот «информационный мусор», т.к. в будущем из-за любого подобного объекта наш запорс будет, скорее всего, вылетать с ошибкой или некорректно собирать данные. Для решения этой задачи можно использовать несколько подходов.

Во-первых, легко можно отфильтровать нужные объекты по типу по столбцу Kind. Например, если вам нужны только листы:

Фильтруем листы

Во-вторых, если нам нужны только видимые листы, то дополнительно можно отфильтровать ещё по столбцу Hidden.

В-третьих, если вы точно знаете размер таблиц, которые вам нужны, то можно легко добавить к нашему списку вычисляемый столбец с формулой, выводящей количество столбцов или строк и использовать потом эти числа для отбора. Для этого выберем на вкладке Добавление столбца — Настраиваемый столбец (Add Column — Custom Column) и введём в открывшееся окно следующую формулу (с учётом регистра):

Подсчет числа столбцов

Для подсчёта количества строк можно использовать аналогичную функцию Table.RowCount. Получившийся столбец затем можно использовать для фильтрации «мусорных» таблиц.

В-четвёртых, можно извлечь с каждого листа содержимое любой ячейки (например, А1) и использовать его для отбора. Например, если там нет слова «Товар«, то это не наш лист. Для извлечения нужно будет также добавить вычисляемый столбец с такой конструкцией:

=[Data][Column1]{0}

Здесь:

  • [Data] — имя столбца, где в каждой ячейке лежат таблицы с содержимым каждого листа (убийственная формулировка для рядового пользователя Excel, да, я знаю)
  • [Column1] — имя столбца на листе, из которого мы хотим извлечь данные
  • {0} — номер строки (считая с нуля), откуда мы хотим взять данные

Извлекаем содержимое А1 с каждого листа

После фильтрации «мусора» все добавленные вспомогательные столбцы можно, конечно же, спокойно удалить, оставив только колонки Name и Data.

Шаг 3. Разворачиваем таблицы

Теперь развернём содержимое таблиц в одно целое, используя кнопку с двойными стрелками в заголовке столбца Data, отключив флажок Использовать исходное имя столбца как префикс (Use original column name as prefix):

Разворачиваем вложенные таблицы

После нажатия на ОК Power Query соберёт для нас все данные в одну мегатаблицу со всех отобранных листов нашего файла:

Собранные данные

Останется лишь «навести блеск», а именно:

  1. Поднять первую строку в шапку таблицы кнопкой Использовать первую строку в качестве заголовков (Use first row as headers) на вкладке Главная (Home).
  2. Переименовать первый столбец в Город двойным щелчком на заголовку.
  3. Удалить повторяющиеся шапки таблиц, попавшие в одну кучу вместе с данными, используя фильтр по столбцу Товар.

Всё. Осталось только дать нашему запросу подходящее имя (например, Сборка) в панели справа и выгрузить затем собранные данные обратно в Excel кнопкой Закрыть и загрузить на вкладке Главная (Home — Close & Load):

Собранные данные

В будущем, при любых изменениях в исходном файле достаточно будет лишь обновить наш запрос, щелкнув по собранной таблице правой кнопкой мыши и выбрав команду Обновить (Refresh) или такой же кнопкой на вкладке Данные (Data) или сочетанием клавиш Ctrl+Alt+F5.

Плюсы такого подхода:

  • Не нужно уметь программировать, всё делается быстро и почти без использования клавиатуры.
  • Последовательность столбцов на разных листах может быть различной — это не играет роли, столбцы правильно встанут друг под друга в итоговой сборке.
  • Можно быстро обновлять запрос при изменении исходных данных.

Минусы этого способа:

  • Собираются только значения, т.е. формулы с исходных листов не сохраняются.
  • Названия столбцов должны на всех листах совпадать с точностью до регистра.
  • Нельзя выбрать какой именно диапазон берётся с каждого листа — это определяется автоматически (берётся всё, что есть).
  • Для обновления нужен Excel 2016 или новее или установленная надстройка Power Query.

Способ 2. Сборка данных с листов макросом на VBA

Похожего результата можно добиться и с помощью более «классического» подохода — макросом на VBA. Для этого на вкладке Разработчик (Developer) нажмите кнпоку Visual Basic или воспользуйтесь сочетанием клавиш Alt+F11. В открывшемся окне добавьте новый модуль через меню Insert — Module и скопируйте туда текст вот такого макроса:

Sub CollectDataFromAllSheets()
    Dim ws As Worksheet
    
    Set wbCurrent = ActiveWorkbook
    Workbooks.Add
    Set wbReport = ActiveWorkbook
    
    'копируем на итоговый лист шапку таблицы из первого листа
    wbCurrent.Worksheets(1).Range("A1:D1").Copy Destination:=wbReport.Worksheets(1).Range("A1")
    
    'проходим в цикле по всем листам исходного файла
    For Each ws In wbCurrent.Worksheets
    
        'определяем номер последней строки на текущем листе и на листе сборки
        n = wbReport.Worksheets(1).Range("A1").CurrentRegion.Rows.Count
        
        'задаем исходный диапазон, который надо скопировать с каждого листа - любой вариант на выбор:
        Set rngData = ws.Range("A1:D5")            'фиксированный диапазон или
        Set rngData = ws.UsedRange                 'всё, что есть на листе или
        Set rngData = ws.Range("F5").CurrentRegion    'область, начиная от ячейки F5 или
        Set rngData = ws.Range("A2", ws.Range("A2").SpecialCells(xlCellTypeLastCell))    'от А2 и до конца листа
        
        'копируем исходный диапазон и вставляем в итоговую книгу со следующей строки
        rngData.Copy Destination:=wbReport.Worksheets(1).Cells(n + 1, 1)
        
    Next ws
End Sub

Запустить созданный макрос можно на вкладке Разработчик кнопкой Макросы (Developer — Macros) или с помощью сочетания клавиш Alt+F8. Макрос автоматически создаст новую книгу и скопирует туда нужные вам данные.

Плюсы такого подхода:

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

Минусы этого способа:

  • Последовательность столбцов на всех листах должна быть одинаковой, т.к. происходит, по сути, тупое копирование таблиц друг-под-друга.
  • Защита от макросов должна быть отключена.
  • Быстрого обновления, как это было с Power Query, здесь, к сожалению, не будет. При изменении исходных данных придётся запустить макрос повторно.

Способ 3. Готовый макрос из надстройки PLEX

Если лень возиться с макросами или Power Query, то можно пойти по пути наименьшего сопротивления — использовать готовый макрос (кнопка Собрать) из моей надстройки PLEX для Excel. Это, может, и не спортивно, но зато эффективно:

Сборка данных с листов через PLEX

В общем, выбирайте любой удобный вам вариант и действуйте. Выбор — это всегда хорошо.

Ссылки по теме

  • Что такое Power Query и с чем его едят.
  • Как создавать свои макросы, использовать чужие и запускать их в своих файлах.
  • Сборка данных из нескольких файлов с помощью Power Query.

Время прочтения: 3 мин.

Иногда может возникнуть необходимость в объединении данных из разных файлов в одну таблицу. Если их много, а информация размещена на разных листах, то обычное копирование займет много времени.

Решить данную задачу поможет Power Query – встроенный в MS Excel инструмент обработки данных.

Рассмотрим пример объединения файлов с общей «шапкой» и данными на разных листах:

  1. Импортируем файлы («Данные» → «Создать запрос» → «Из файла» → «Из папки») и указываем путь:

2. Power Query покажет все файлы, размещенные по указанному адресу:

3. Нажимаем «изменить», переходим в редактор запросов и фильтруем нужные файлы:

4. Удаляем все столбцы кроме «Content»:

5. Добавляем новый столбец и вводим формулу с учетом регистра:

6. Раскрываем столбец «Пользовательская», снимаем флажок «Использовать исходное имя…».

Если есть предупреждение о незавершенном списке, то жмем «загрузить ещё»:

7. Удаляем столбцы кроме «Data», раскрываем его. Если есть предупреждение, то жмем «загрузить ещё»:

8. Power Query отразит сводные данные:

9. Ставим первую строку как заголовок: «Главная» → «Использовать первую строку…»:

10. Скрываем фильтром лишние заголовки и выгружаем данные на новый/существующий лист:

Готово! Информация со всех листов всех файлов собрана в общую таблицу при существенно меньших трудозатратах по сравнению с ручным копированием.

Таким образом, Power Query позволяет решать широкий спектр задач без использования сложных запросов и формул, что делает его универсальным инструментом для обработки данных и повышения эффективности работы.

Skip to content

6 примеров — как консолидировать данные и объединить листы Excel в один

В статье рассматриваются различные способы объединения листов в Excel в зависимости от того, какой результат вы хотите получить:

  • объединить все данные с выбранных листов,
  • объединить несколько листов с различным порядком столбцов,
  • объединить определённые столбцы с нескольких листов,
  • объединить две таблицы Excel в одну по ключевым столбцам.

Сегодня мы займемся проблемой, с которой ежедневно сталкиваются многие пользователи Excel, — как объединить листы Excel в один без использования операций копирования и вставки. Рассмотрим два наиболее распространенных сценария: объединение числовых данных (сумма, количество, среднее и т. д.) и объединение листов ( то есть копирование данных из нескольких листов в один).

Вот что мы рассмотрим в этой статье:

  • Объединение при помощи стандартного инструмента консолидации.
  • Как копировать несколько листов Excel в один.
  • Как объединить листы с различным порядком столбцов.
  • Объединение только определённых столбцов из нескольких листов
  • Слияние листов в Excel с использованием VBA
  • Как объединить два листа в один по ключевым столбцам

Консолидация данных из нескольких листов на одном.

Самый быстрый способ консолидировать данные в Excel (в одной или нескольких книгах) — использовать встроенную функцию Excel Консолидация.

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

Как вы видите на скриншоте ниже, четыре объединяемых листа имеют схожую структуру данных, но разное количество строк и столбцов:

Чтобы объединить всю эту информацию на одном листе, выполните следующие действия:

  1. Правильно расположите исходные данные. Чтобы функция консолидации Excel работала правильно, убедитесь, что:
    • Каждый диапазон (набор данных), который вы хотите объединить, находится на отдельном листе. Не помещайте данные на лист, куда вы планируете выводить консолидированные данные.
    • Каждый лист имеет одинаковый макет, и каждый столбец имеет заголовок и содержит похожие данные.
    • Ни в одном списке нет пустых строк или столбцов.
  2. Запустите инструмент «Консолидация». На новом листе, где вы планируете поместить результаты, щелкните верхнюю левую ячейку, начиная с которой должны отображаться консолидированные данные, затем на ленте перейдите на вкладку «Данные» и нажмите кнопку «Консолидация».

Совет. Желательно объединить данные в пустой лист. Если на вашем основном листе уже есть данные, убедитесь, что имеется достаточно места (пустые строки и столбцы) для записи результатов.

  1. Настройте параметры консолидации. Появляется диалоговое окно «Консолидация», и вы делаете следующее:
    • В поле «Функция» выберите одну из функций, которую вы хотите использовать для консолидации данных (количество, среднее, максимальное, минимальное и т. д.). В этом примере мы выбираем Сумма.
    • В справочном окне, нажав в поле Ссылка на значок  , выберите диапазон на первом листе. Затем нажмите кнопку «Добавить», чтобы присоединить его к списку диапазонов. Повторите этот шаг для всех листов, которые вы хотите объединить.

Если один или несколько листов находятся в другой книге, используйте кнопку «Обзор», чтобы найти эту книгу и использовать ее.

  1. Настройте параметры обновления. В том же диалоговом окне Консолидация выберите любой из следующих параметров:
    • Установите флажки «Подписи верхней строки» и / или «Значения левого столбца» в разделе «Использовать в качестве имён», если вы хотите, чтобы заголовки строк и / или столбцов исходных диапазонов были также скопированы.
    • Установите флажок «Создать связи с исходными данными», если нужно, чтобы консолидированные данные обновлялись автоматически при изменении исходных таблиц. В этом случае Excel создаст ссылки на ваши исходные листы, а также схему, как на следующем скриншоте:

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

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

Если вы хотите объединить листы в Excel, просто скопировав и объединив их содержимое, вариант консолидации не подходит. Чтобы объединить всего парочку из них, создав как бы единый массив данных, то вам из стандартных возможностей Excel не подойдёт ничего, кроме старого доброго копирования / вставки. 

Но если вам предстоит таким образом обработать десятки листов, ошибки при этом будут практически неизбежны. Да и затраты времени весьма значительны.

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

Как скопировать несколько листов Excel в один.

Как мы уже убедились, встроенная функция консолидации умеет суммировать данные из разных листов, но не может объединять их путем копирования данных на какой-то итоговый лист. Для этого вы можете использовать один из инструментов слияния и комбинирования, включенных в надстройку Ultimate Suite для Excel.

Для начала давайте будем исходить из следующих условий:

  • Структура таблиц и порядок столбцов на всех листах одинаковы.
  • Количество строк везде разное.
  • Листы могут в будущем добавляться или удаляться.

Итак, у вас есть несколько таблиц, содержащих информацию о различных товарах, и теперь вам нужно объединить эти таблицы в одну итоговую, например так, как на рисунке ниже:

Три простых шага — это все, что нужно, чтобы объединить выбранные листы в один.

1.       Запустите мастер копирования листов.

На ленте перейдите на вкладку AblebitsData, нажмите «Копировать листы (Copy Sheets)» и выберите один из следующих вариантов:

  1. Скопировать листы из каждой книги на один лист и поместить полученные листы в одну книгу.
  2. Объединить листы с одинаковыми названиями в один.
  3. Скопировать выбранные в одну книгу.
  4. Объединить данные из выбранных листов на один лист.

Поскольку мы хотим объединить несколько листов путем копирования их данных, то выбираем последний вариант:

1.       Выберите листы и, при необходимости, диапазоны для объединения.

Мастер копирования листов отображает список всех имеющихся листов во всех открытых книгах. Выберите те из них, которые хотите объединить, и нажмите « Далее».

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

В этом примере мы объединяем первые три листа нашей книги:

Совет. Если рабочие листы, которые вы хотите объединить, находятся в другой книге, которая в данный момент закрыта, нажмите кнопку «Добавить файлы …» , чтобы найти и открыть эту книгу.

2.       Выберите, каким образом произвести объединение.

На этом этапе вы должны настроить дополнительные параметры, чтобы ваша информация была объединена именно так, как вы хотите.

Как вставить :

  1. Вставить все – скопировать все данные (значения и формулы). В большинстве случаев это правильный выбор.
  2. Вставлять только значения – если вы не хотите, чтобы переносились формулы, выберите этот параметр.
  3. Создать ссылки на исходные данные – это добавит формулы, связывающие итоговые ячейки с исходными. Выберите этот параметр, если вы хотите, чтобы результат объединения обновлялся автоматически при изменении исходных файлов. Это работает аналогично параметру «Создать ссылки на исходные данные» в стандартном инструменте консолидации в Excel.

Как расположить :

  1. Разместите скопированные диапазоны один под другим – то есть вертикально.
  2. Расположить скопированные диапазоны рядом – то есть по горизонтали.

Как скопировать :

  • Сохранить форматирование – понятно и очень удобно.
    • Разделить скопированные диапазоны пустой строкой – выберите этот вариант, если вы хотите добавить пустую строку между сведениями, скопированными из разных листов. Так вы сможете отделить их друг от друга, если это необходимо.
    • Скопировать таблицы вместе с их заголовками. Установите этот флажок, если хотите, чтобы заголовки исходных таблиц были включены в итоговый лист.

На скриншоте ниже показаны настройки по умолчанию, которые нам подходят:

Нажмите кнопку «Копировать (Copy)», и у вас будет содержимое трех разных листов, объединенное в один итоговый, как показано в начале этого примера.

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

Как объединить листы Excel с различным порядком столбцов.

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

Используем инструмент объединения листов Combine Sheets.

Запускаем надстройку через меню Ablebits Data – Combine Sheets.

Выбираем и отмечаем галочками те листы, данные с которых мы хотим объединить. Затем программа анализирует их и предлагает нам список найденных столбцов с указанием того, сколько раз столбец с подобным названием был обнаружен.

Вы должны указать те столбцы, данные из которых вы хотели бы объединить. Можете выбрать их все, можете – только самые важные.

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

Также можно указать, что необходимо сохранить исходное форматирование, если оно уникально в каждой таблице. Так вам, кстати, будет проще определить, откуда появились сведения в общем массиве, какая таблица является их источником.

И данные будут идеально скомпонованы по заголовкам столбцов:

Мы получили своего рода сводную таблицу с необходимой информацией.

Объединение определенных столбцов из нескольких листов.

А вот, как мне кажется, наиболее часто встречающаяся ситуация:

  • у вас действительно большие листы с множеством разных столбцов,
  • столбцы расположены на каждом из них по-разному, в произвольном порядке,
  • необходимо объединить только самые важные из них в итоговую таблицу. 

Запустите мастер объединения листов, как мы это делали в предыдущем примере, укажите нужные, а затем выберите соответствующие столбцы. Да, это так просто!

Все дальнейшие шаги мы уже описывали выше. В результате в итоговую таблицу попадают только данные из выбранных вами столбцов:

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

Полнофункциональная ознакомительная версия Ultimate Suite доступна для загрузки в по этой ссылке.

Слияние листов в Excel с помощью кода VBA

Если вы опытный пользователь Excel и чувствуете себя комфортно с макросами и VBA, вы можете объединить несколько листов Excel в один, используя какой-нибудь сценарий.

Для этого на вкладке Разработчик (Developer) нажмите кнопку Visual Basic или воспользуйтесь сочетанием клавиш Alt+F11. В открывшемся окне добавьте новый модуль через меню Insert — Module и скопируйте туда текст вот такого макроса:

Sub CopyDataWithHeaders()
    Dim sh As Worksheet
    Dim DestSh As Worksheet
    Dim Last As Long
    Dim shLast As Long
    Dim CopyRng As Range
    Dim StartRow As Long

    With Application
        .ScreenUpdating = False
        .EnableEvents = False
    End With

    'Delete the sheet "RDBMergeSheet" if it exist
    Application.DisplayAlerts = False
    On Error Resume Next
    ActiveWorkbook.Worksheets("RDBMergeSheet").Delete
    On Error GoTo 0
    Application.DisplayAlerts = True

    'Add a worksheet with the name "RDBMergeSheet"
    Set DestSh = ActiveWorkbook.Worksheets.Add
    DestSh.Name = "RDBMergeSheet"

    'Fill in the start row
    StartRow = 2

    'loop through all worksheets and copy the data to the DestSh
    For Each sh In ActiveWorkbook.Worksheets
        If sh.Name <> DestSh.Name Then

'Copy header row, change the range if you use more columns
If WorksheetFunction.CountA(DestSh.UsedRange) = 0 Then
  sh.Range("A1:Z1").Copy DestSh.Range("A1")
End If

            'Find the last row with data on the DestSh and sh
            Last = LastRow(DestSh)
            shLast = LastRow(sh)

            'If sh is not empty and if the last row >= StartRow copy the CopyRng
            If shLast > 0 And shLast >= StartRow Then

                'Set the range that you want to copy
                Set CopyRng = sh.Range(sh.Rows(StartRow), sh.Rows(shLast))

                'Test if there enough rows in the DestSh to copy all the data
                If Last + CopyRng.Rows.Count > DestSh.Rows.Count Then
                    MsgBox "There are not enough rows in the Destsh"
                    GoTo ExitTheSub
                End If

                'This example copies values/formats, if you only want to copy the
                'values or want to copy everything look below example 1 on this page
                CopyRng.Copy
                With DestSh.Cells(Last + 1, "A")
                    .PasteSpecial xlPasteValues
                    .PasteSpecial xlPasteFormats
                    Application.CutCopyMode = False
                End With

            End If

        End If
    Next

ExitTheSub:

    Application.Goto DestSh.Cells(1)

    'AutoFit the column width in the DestSh sheet
    DestSh.Columns.AutoFit

    With Application
        .ScreenUpdating = True
        .EnableEvents = True
    End With
End Sub

Function LastRow(sh As Worksheet)
    On Error Resume Next
    LastRow = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            Lookat:=xlPart, _
                            LookIn:=xlFormulas, _
                            SearchOrder:=xlByRows, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Row
    On Error GoTo 0
End Function


Function LastCol(sh As Worksheet)
    On Error Resume Next
    LastCol = sh.Cells.Find(What:="*", _
                            After:=sh.Range("A1"), _
                            Lookat:=xlPart, _
                            LookIn:=xlFormulas, _
                            SearchOrder:=xlByColumns, _
                            SearchDirection:=xlPrevious, _
                            MatchCase:=False).Column
    On Error GoTo 0
End Function

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

В этой функции выполняется копирование данных со всех листов начиная со строки 2 и до последней строки с данными. Если шапка в ваших таблицах занимает две или более строки, то измените этот код, поставив вместо 2 цифры 3, 4 и т.д.:

    'Fill in the start row
    StartRow = 2

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

Ещё несколько интересных примеров кода VBA для объединения листов вашей рабочей книги вы можете найти по этой ссылке.

Как объединить два листа Excel в один по ключевому столбцу

Если вы ищете быстрый способ сопоставить и объединить данные из двух листов, вы можете либо использовать функцию Excel ВПР, либо воспользоваться мастером объединения таблиц Merge Two Tables. 

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

Более подробно его работа рассмотрена в этой статье.

Мастер объединения двух таблиц также включен в Ultimate Suite for Excel, как и множество других полезных функций.

Вот как вы можете объединить листы в Excel. Я надеюсь, что вы найдете информацию в этом коротком руководстве полезной. Если у вас есть вопросы, не стесняйтесь оставлять их в комментариях.

Быстрое удаление пустых столбцов в Excel В этом руководстве вы узнаете, как можно легко удалить пустые столбцы в Excel с помощью макроса, формулы и даже простым нажатием кнопки. Как бы банально это ни звучало, удаление пустых…
Как быстро объединить несколько файлов Excel Мы рассмотрим три способа объединения файлов Excel в один: путем копирования листов, запуска макроса VBA и использования инструмента «Копировать рабочие листы» из надстройки Ultimate Suite. Намного проще обрабатывать данные в…
Как работать с мастером формул даты и времени Работа со значениями, связанными со временем, требует глубокого понимания того, как функции ДАТА, РАЗНДАТ и ВРЕМЯ работают в Excel. Эта надстройка позволяет быстро выполнять вычисления даты и времени и без особых…
Как найти и выделить уникальные значения в столбце В статье описаны наиболее эффективные способы поиска, фильтрации и выделения уникальных значений в Excel. Ранее мы рассмотрели различные способы подсчета уникальных значений в Excel. Но иногда вам может понадобиться только просмотреть уникальные…
Как получить список уникальных значений В статье описано, как получить список уникальных значений в столбце с помощью формулы и как настроить эту формулу для различных наборов данных. Вы также узнаете, как быстро получить отдельный список с…
6 способов быстро транспонировать таблицу В этой статье показано, как столбец можно превратить в строку в Excel с помощью функции ТРАНСП, специальной вставки, кода VBA или же специального инструмента. Иначе говоря, мы научимся транспонировать таблицу.…
Как объединить две или несколько таблиц в Excel В этом руководстве вы найдете некоторые приемы объединения таблиц Excel путем сопоставления данных в одном или нескольких столбцах. Как часто при анализе в 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 будут использованы в аргументе номер_строки функции ИНДЕКС. Ранее, вы уже сталкивались с элементами, необходимыми для создания относительной позиции внутри массива:

  • В главах 4 и 11 вы узнали об использовании Булевой алгебры и функции ЕСЛИ для фильтрации элементов внутри формулы (см. Глава 4. Сравнение массивов и выборки по одному или нескольким условиям и Глава 11. Булева логика: критерии И, ИЛИ).
  • В главе 8 вы узнали о фрагменте формулы, который создает массив последовательных чисел, или относительных позиций: СТРОКА(диапазон) – СТРОКА(первая_ячейка_в_ диапазоне) + 1 (см. Глава 8. Формулы массива, возвращающие более одного значения).

Если вы используете 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 глав книги Гирвина, и остановился, так как статистика посещений показала, что тема не очень интересна читателям сайта (правда, были и положительные отзывы). Я возобновил перевод в связи любопытным вопросом в одном из комментариев.

Как собрать данные с нескольких листов или книг на один лист?

Одной из классических операций в Excel является копирование данных с одного листа на другой. Скопировал — вставил, никаких вопросов. Проблемы начинаются когда требуется собрать данные из разных источников, например с нескольких листов Excel на одном листе.

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

Сбор данных с нескольких листов Excel на итоговый лист

Для того чтобы слить данные с разных листов рабочей книги на один лист, потребуется надстройка для Excel по сбору данных. После ее установки Вам останется лишь запустить программу нажатием одной кнопки из ленты Excel и в диалоговом окне выбрать необходимые параметры для сбора информации.

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

1) Используемые диапазоны — это диапазоны, начинающиеся с первой используемой ячейки и заканчивающиеся последней используемой ячейкой;

2) Предварительно выделенные диапазоны на каждом листе — диапазоны, выделенные пользователем самостоятельно, исходя из его потребностей по консолидации данных;

3) Одноименные диапазоны — диапазоны с одинаковым адресом на каждом листе, указанным на активном рабочем листе;

4) Выборочные диапазоны — диапазоны ячеек, начинающиеся с выбранной ячейки и заканчивающиеся концом листа (последней используемой ячейкой).

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

Кроме того, в диалоговом окне надстройки можно указать способ расположения данных на итоговом листе, в зависимости от выбранной опции диапазоны будут располагаться один ниже другого (вертикальное расположение), либо один правее другого (горизонтальное расположение).

Для наглядности, чтобы на итоговом листе можно было видеть где заканчивается один диапазон и начинается другой, предусмотрена возможность отделять диапазоны друг от друга двойной сплошной линией, а также добавлять имена листов перед диапазонами.

Зачастую копируемые диапазоны содержат формулы, которые ссылаются на ячейки, адреса которых выходят за пределы копируемой области, либо наличие которых на итоговом листе нежелательно, для этих случаев добавлена опция «Заменять формулы результатами вычислений». Возможность заменять формулы результатами вычислений отсутствует, если копируемые диапазоны содержат объединенные ячейки.

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

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

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

Видео по сбору данных со всех листов на итоговый лист

Сбор данных с нескольких книг Excel на один лист

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

1) При помощи надстройки для объединения рабочих книг в один файл, собрать все листы в одной рабочей книге;

2) При помощи надстройки для сбора данных на итоговый лист, объединить данные с разных листов.

Как собрать данные с нескольких листов excel на один лист

Многие пользователи совершают одну и ту же ошибку: разносят исходную информацию на несколько листов. Таким образом файл становится неудобным для итогового анализа. Представим что такой файл достался Вам, например от уволенного сотрудника, место которого Вы заняли 🙂 В файле 12 листов итогов работы сотрудников по месяцам, содержащие абсолютно одинаковые таблицы, отличающиеся только значениями результативности, и один общий лист, на который необходимо собрать всю информацию за год, для того что бы определить кто из сотрудников работал наиболее результативно.

ПРОБЛЕМА: Как быстро собрать информацию на один лист из нескольких?
И заполнить такую форму:

КАК ЭТО РАБОТАЕТ:
Функция ДВССЫЛ() возвращает ссылку, заданную текстовой строкой. По простому говоря:=ДВССЫЛ( B1 &» !B2 «) — даёт нам ссылку аналогичную = Янв !B2 , потому как в ячейке В1 находится текст Янв , который конкатенируется (сцепляется) посредством оператора конкатенации амперсанда & с указанием конкретной ячейки листа Янв В2 .

КОММЕНТАРИИ: Так же можно использовать подобные конструкции и для извлечения данных из других книг.

МИНУСЫ: Функция ДВССЫЛ() не работает с закрытыми книгами.

ОБЛАСТЬ ПРИМЕНЕНИЯ
: Любая версия Excel

Консолидация данных с нескольких листов

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

Для подведения итогов и результатов из отдельных листов, можно объединить данные из каждого листа в главном листе. Листы может быть в той же книге как главном листе или в других книгах. При объединении данных, чтобы упростить можно обновить и статистической обработки при необходимости собирать данные.

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

Совет: Если вы часто консолидировать данные, он помогут создать новые листы на основе шаблона с единообразным макетом. Дополнительные сведения о шаблонах читайте в статье: Создать шаблон. Это также идеально время Настройка шаблона с помощью таблиц Excel.

Консолидация данных по положению или категории двумя способами.

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

Консолидация по категории: данные в исходных областях не расположены в одном и том же порядке, но имеют одинаковые метки. Используйте этот способ, чтобы консолидировать данные из нескольких листов с разными макетами, но одинаковыми метками данных.

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

Примечание: В этой статье были созданы с Excel 2016. Хотя представления могут отличаться при использовании другой версии Excel, шаги одинаковы.

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

Если вы еще не сделано, настройте данные на каждом листе составные, сделав следующее:

Убедитесь, что все диапазоны данных представлены в формате списка. Каждый столбец необходимо иметь метку (верхний колонтитул) в первой строке и содержать похожие данные. Должен быть отсутствуют пустые строки или столбцы в любом месте в списке.

Разместите каждый диапазон на отдельном листе, но не было введено никаких данных в основном листе где план для консолидации данных. Excel будет сделать это для вас.

Убедитесь, что всех диапазонов совпадают.

На основном листе щелкните левый верхний угол области, в которой требуется разместить консолидированные данные.

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

Нажмите кнопку данные>Консолидация (в группе Работа с данными ).

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

Вот пример, в котором выбраны три диапазоны листа:

Далее в поле ссылка нажмите кнопку Свернуть, чтобы уменьшить масштаб панели и выбрать данные на листе.

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

Если лист, содержащий данные, которые необходимо объединить в другой книге, нажмите кнопку Обзор, чтобы найти необходимую книгу. После поиска и нажмите кнопку ОК, Excel в поле ссылка введите путь к файлу и добавление восклицательный знак, путь к. Чтобы выбрать другие данные можно нажмите Продолжить.

Вот пример, в котором выбраны три диапазоны листа выбранного:

Во всплывающем окне Консолидация нажмите кнопку Добавить. Повторите этот сценарий, чтобы добавить все нужные диапазоны консолидации.

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

Связи невозможно создать, если исходная и конечная области находятся на одном листе.

Если необходимо изменить степень диапазона — или замените диапазон — выберите диапазон, во всплывающем окне Консолидация и обновлять его, выполнив указанные выше действия. Создаст новый в ссылке на диапазон, поэтому вам нужно будет сначала удалить предыдущий перед Консолидация еще раз. Просто выберите старой ссылки и нажмите клавишу Delete.

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

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

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

Если данные для консолидации находятся в разных ячейках разных листов:

Введите формулу со ссылками на ячейки других листов (по одной на каждый лист). Например, чтобы консолидировать данные из листов «Продажи» (в ячейке B4), «Кадры» (в ячейке F5) и «Маркетинг» (в ячейке B9) в ячейке A2 основного листа, введите следующее:

Совет: Чтобы указать ссылку на ячейку — например, продажи! B4 — в формуле, не вводя, введите формулу до того места, куда требуется вставить ссылку, а затем щелкните лист, используйте клавишу tab и затем щелкните ячейку. Excel будет завершена адрес имя и ячейку листа для вас. Примечание: формулы в таких случаях может быть ошибкам, поскольку очень просто случайно выбираемых неправильной ячейки. Также может быть сложно ошибку сразу после ввода сложные формулы.

Если данные для консолидации находятся в одинаковых ячейках разных листов:

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

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community, попросить помощи в сообществе Answers community, а также предложить новую функцию или улучшение на веб-сайте Excel User Voice.

Как собрать данные с нескольких листов или книг?

Очень часто бывает необходимо собрать данные с нескольких листов одной книги или даже с листов нескольких книг. Например, каждую неделю мы получаем некие отчеты от отделов, которые необходимо собрать в одну общую таблицу для построения сводной таблицы. Или это могут быть некие книги прайсов по товарам от разных поставщиком, который опять же надо сначала объединить, а потом уже анализировать. Вручную делать это довольно муторно. И то, муторно это только для первых 20-ти листов/файлов, потом становится просто тошно. Поэтому решил поделиться решением, которое поможет собрать данные со всех листов книги, со всех листов всех указанных книг или только с указанных листов:

‘————————————————————————————— ‘ Module : mConsolidated ‘ DateTime : 02.02.2010 17:06 ‘ Author : The_Prist(Щербаков Дмитрий) ‘ Purpose : http://www.excel-vba.ru/chto-umeet-excel/kak-sobrat-dannye-s-neskolkix-listov-ili-knig/ ‘ Процедура сбора данных с нескольки листов/книг ‘————————————————————————————— Option Explicit Sub Consolidated_Range_of_Books_and_Sheets() Dim iBeginRange As Range, rCopy As Range, lCalc As Long, lCol As Long Dim oAwb As String, sCopyAddress As String, sSheetName As String Dim lLastrow As Long, lLastRowMyBook As Long, li As Long, iLastColumn As Integer Dim wsSh As Worksheet, wsDataSheet As Worksheet, bPolyBooks As Boolean, avFiles Dim wbAct As Workbook Dim bPasteValues As Boolean On Error Resume Next ‘Выбираем диапазон выборки с книг Set iBeginRange = Application.InputBox(«Выберите диапазон сбора данных.» & vbCrLf & _ «1. При выборе только одной ячейки данные будут собраны со всех листов начиная с этой ячейки. » & _ vbCrLf & «2. При выделении нескольких ячеек данные будут собраны только с указанного диапазона всех листов.», Type:=8) ‘для указания диапазона без диалогового окна: ‘Set iBeginRange = Range(«A1:A10») ‘диапазон указывается нужный ‘Если диапазон не выбран — завершаем процедуру If iBeginRange Is Nothing Then Exit Sub ‘Указываем имя листа ‘Допустимо указывать в имени листа символы подставки ? и *. ‘Если указать только * то данные будут собираться со всех листов sSheetName = InputBox(«Введите имя листа, с которого собирать данные(если не указан, то данные собираются со всех листов)», «Параметр») ‘Если имя листа не указано — данные будут собраны со вех листов If sSheetName = «» Then sSheetName = «*» On Error GoTo 0 ‘Запрос — вставлять на результирующий лист все данные ‘или только значения ячеек (без формул и форматов) bPasteValues = (MsgBox(«Вставлять только значения?», vbQuestion + vbYesNo, «Excel-VBA») = vbYes) ‘Запрос сбора данных с книг(если Нет — то сбор идет с активной книги) If MsgBox(«Собрать данные с нескольких книг?», vbInformation + vbYesNo, «Excel-VBA») = vbYes Then avFiles = Application.GetOpenFilename(«Excel files(*.xls*),*.xls*», , «Выбор файлов», , True) If VarType(avFiles) = vbBoolean Then Exit Sub bPolyBooks = True lCol = 1 Else avFiles = Array(ThisWorkbook.FullName) End If ‘отключаем обновление экрана, автопересчет формул и отслеживание событий ‘для скорости выполнения кода и для избежания ошибок, если в книгах есть иные коды With Application lCalc = .Calculation .ScreenUpdating = False: .EnableEvents = False: .Calculation = xlManual End With ‘создаем новый лист в книге для сбора Set wsDataSheet = ActiveWorkbook.Sheets.Add(After:=Sheets(Sheets.Count)) ‘если нужно сделать сбор данных на новый лист книги с кодом ‘Set wsDataSheet = ThisWorkbook.Sheets.Add(After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)) ‘цикл по книгам For li = LBound(avFiles) To UBound(avFiles) If bPolyBooks Then Set wbAct = Workbooks.Open(Filename:=avFiles(li)) Else Set wbAct = ThisWorkbook End If oAwb = wbAct.Name ‘цикл по листам For Each wsSh In wbAct.Worksheets If wsSh.Name Like sSheetName Then ‘Если имя листа совпадает с именем листа, в который собираем данные ‘и сбор идет только с активной книги — то переходим к следующему листу If wsSh.Name = wsDataSheet.Name And bPolyBooks = False Then GoTo NEXT_ With wsSh Select Case iBeginRange.Count Case 1 ‘собираем данные начиная с указанной ячейки и до конца данных lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row iLastColumn = .Cells.SpecialCells(xlLastCell).Column sCopyAddress = .Range(.Cells(iBeginRange.Row, iBeginRange.Column), .Cells(lLastrow, iLastColumn)).Address Case Else ‘собираем данные с фиксированного диапазона sCopyAddress = iBeginRange.Address End Select lLastRowMyBook = wsDataSheet.Cells.SpecialCells(xlLastCell).Row + 1 ‘определяем для копирования диапазон только заполненных данных на листе Set rCopy = Intersect(.Range(sCopyAddress).Parent.UsedRange, .Range(sCopyAddress)) ‘вставляем имя книги, с которой собраны данные If lCol Then wsDataSheet.Cells(lLastRowMyBook, 1).Resize(rCopy.Rows.Count).Value = oAwb ‘если вставляем только значения и форматы ячеек If bPasteValues Then rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteValues wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol).PasteSpecial xlPasteFormats Else ‘если вставляем все данные ячеек(значения, формулы, форматы и т.д.) rCopy.Copy wsDataSheet.Cells(lLastRowMyBook, 1).Offset(, lCol) End If End With End If NEXT_: Next wsSh If bPolyBooks Then wbAct.Close False Next li With Application .ScreenUpdating = True: .EnableEvents = True: .Calculation = lCalc End With End Sub

Приведенный выше код необходимо вставить в стандартный модуль(Что такое модуль? Какие бывают модули?). Выполнить его можно будет из этой книги нажатием клавиш Alt+F8. В появившемся окне выбрать Consolidated_Range_of_Books_and_Sheets и нажать Выполнить. Так же можно создать на листе кнопку и назначить ей данный макрос. Так же, если впервые работаете с макросами настоятельно рекомендую прочитать статью: Что такое макрос и где его искать?, а так же Почему не работает макрос?

После вызова макроса поочередно будут появляется запросы, в которых надо будет указать исходные параметры:

  • Диапазон сбора данных — Если в окне выбора диапазона выбрать только одну ячейку, то данные будут собраны со всех листов книги/книг, начиная с этой ячейки и до последней ячейки листа.
    Если выбрать несколько ячеек, данные будут собраны только с указанного диапазона всех листов книги/книг. Допускается указать несвязанный(рваный) диапазон(например, только три столбца: A:A , D:D , F:F ). Сделать это можно, выделив нужный диапазон с зажатой клавишей Ctrl
  • Имя листа — Необязателен для указания. Если не указан — данные будут собраны со всех листов. Указать можно как точное соответствие имени листа, так и с частичным соответствием. Например, если в книгах для сбора данных необходимо собрать данные только с листа «Январь», то следует так и указать — «Январь». Если требуется собрать данные только с листов, начинающихся с «Продажи»(«Продажи ЮГ», «Продажи НН», «Продажи Запад» и т.д.), то следует применить символ подстановки звездочку — «Продажи*». Если надо собрать с листов, содержащих в имени «продажи»(«Итоговые продажи ЮГ», «Продажи НН», «Сезонные продажи» и т.д.), то указываем «*продажи*». Если надо собрать только с листа «Сезонные продажи», но известно, что вместо пробела может быть нижнее подчеркивание или тире(«Сезонные продажи», «Сезонные_продажи», «Сезонные-продажи») или иной символ, то можно также применить звездочку — «Сезонные*продажи». Но если среди листов могут встречаться и такие как «Сезонные разовые продажи», «Сезонные корпоративные продажи» и т.п., но информацию с них собирать не надо, то можно применить вопросительный знак — «Сезонные?продажи». Вопросительный знак заменяет любой один символ, звездочка — любое количество любых символов.
  • Далее появится запрос: Вставлять только значения? — если выбрать Да, то в результирующий лист с листов будут вставлены исключительно значения ячеек (без формул), но при этом сохранятся их форматы(формат чисел, цвет заливки, цвет шрифта, границы и т.п.). Может пригодится, если на листах для сбора записаны формулы, ссылающиеся на другие листы, книги, диапазоны. При обычном копировании может случиться так, что формула выдаст ошибку, т.к. в книге для вставки нет таких листов и диапазонов или данные расположены иначе. Если выбрать Нет, то все ячейки с листов на результирующий будут копироваться в точности как в исходных листах.
  • И последний запрос: Собрать данные с нескольких книг? — если выбрать Да, то появится диалоговое окно выбора файлов. Надо указать все файлы, данные с которых необходимо собрать. Если выбрать Нет, то данные будут собираться с листов только активной книги.

Данные будут собраны на новый лист книги с макросом. Если данные собирались с нескольких книг, то в первый столбец будут занесены имена книг, с которых собраны данные.

Если после сбора данных обнаружили, что после каждого файла/листа много пустых строк, то следует найти в коде строку:

lLastrow = .Cells(1, 1).SpecialCells(xlLastCell).Row

Excel At Excel вып.3: Собираем данные с разных листов

Дано: 22 таблицы унифицированного формата с перечнем помещений от 22 дочерних предприятий.

Задача: сделать сводную таблицу с данными всех 22 таблиц

Итак, решение. Есть три варианта решения данной задачи. Первый — использовать встроенную (начиная с excel 2013) надстройку PowerPivot (об этом методе мы поговорим позднее). Второй — посредством сводной таблицы через несколько диапазонов консолидации. Не люблю этот метод, т.к. такая сводная таблица имеет существенно более ограниченный функционал по сравнению с простой сводной таблицей. Наконец, третий вариант — это создать общую таблицу с использованием функции INDIRECT (ДВССЫЛ). Этому методу и посвятим сегодня наш пост.

Что мы имеем? 22 одинаковых по формату таблицы на отдельных листах и с разным количеством строк в каждой. Соответственно, для построения общей таблицы нам надо решить следующие «проблемы»:

1) как заставить общую таблицу «переключаться» с одного листа данных на другой?;

2) как заставить ее делать это в нужный момент (когда закончились строки на одном листе)?

Начнем со второго вопроса, т.к. ответ на него мы уже знаем. Это циклы, о которых мы подробно говорили в выпуске 2 «Циклы в Excel без VBA». Для решения проблемы достаточно в наш файл добавить лист с перечнем всех обществ, соответствующими названиями листов и количеством подсчетом количества строк на каждом таком листе.

Обратите внимание на формулу в столбце Кол-во записей. Мы могли бы использовать просто COUNTA (СЧЁТА) со ссылкой на каждый лист. Но это потребует времени для «линковки» каждого листа. Плюс мы с вами готовим универсальные решения, которые будут работать в независимости от количества листов.

Именно для этого в функцию COUNTA (СЧЁТА) и внедряется эта чуднАя функция INDIRECT (ДВССЫЛ). Остановимся на ней подробнее.

Функция имеет, по сути, единственный параметр — ref_text (ссылка_на_текст). Что делает эта функция? Всего-навсего преобразует текст в ссылку на ячейку. То есть она преобразует текст, например, «А1» в ссылку и возвращает значение ячейки А1.

Соответственно, зная несложные правила работы с текстом в Excel, мы можем легко сделать текст внутри изменяемым, а значит можем сделать и изменяемыми ссылки, которые будет возвращать функция INDIRECT (ДВССЫЛ).

Разберем пример выше. Функция INDIRECT (ДВССЫЛ) имеет следующий вид:

Чтобы понять, что означает текст внутри нее, давайте вспомним, как выглядит в Excel ссылка на ячейку на другом листе. Вот так:

Соответственно, в нашем случае у нас неизменен столбец B:B, а вот название листа меняется. Для «автоматизации» формулы заменяем Название листа на ссылку на название листа с данными по соответствующему обществу (столбец Название листа). Получаем следующее:

где все, что подчеркнуто — текст, а выделено жирным — ссылки.

ВАЖНО! Обратите внимание на кавычки и конкатенацию («склеивание») при помощи амперсента. Не забудьте, что текст вносится в кавычках и соединяется со ссылками при помощи символа &.

Получается, что INDIRECT (ДВССЫЛ) получает название листа из ячеек в столбце А:А (Название листа), а диапазон у нас прописан фиксированно текстом (В:В). COUNTA (СЧЁТА) же просто считает количество строк в столбце В:В на соответствующем листа за вычетом заголовка.

Перейдем к формированию общей таблицы. Как вы уже наверное прикинули, у нас будет два вложенных цикла: один — количество обществ, второй — количество записей на листе данных по соответствующему обществу. Соответственно, нам потребуются два вспомогательных столбца (определим их в столбцы А и В). Ровно так же, как мы делали на примере в выпуске 2 «Циклы в Excel без VBA», пишем формулу первого цикла:

=IF(A2=»»;»»;IF(COUNTIF($A$2:A2;A2)=OFFSET(‘Список обществ’!$E$2;A2-1;0);IF(A2+1>COUNTA(‘Список обществ’!A:A)-1;»»;A2+1);A2))

Затем пишем формулу второго цикла:

Далее при помощи уже знакомой нам функции OFFSET (СМЕЩ) заполняем столбцы из таблицы на листе Список обществ.

Осталось подтянуть данные с 22 листов по обществам. Тут нам опять поможет OFFSET (СМЕЩ), но уже в паре с INDIRECT (ДВССЫЛ).

OFFSET (СМЕЩ) передает в формулу название листа, а конструкция B2+1 — номер строки в столбце Е на том листе.

ВАЖНО! Обратите внимание, что OFFSET (СМЕЩ) вкладывается внутрь INDIRECT (ДВССЫЛ), а не наоборот.

Like this post? Please share to your friends:
  • Извещение форма по окуд 0504805 бланк скачать бесплатно в excel
  • Играть в word это
  • Извещение на оплату word
  • Играть в word of google
  • Известно что количество учеников во всех классах начальной школы класс excel