Сборка данных со всех листов книги в одну таблицу
Постановка задачи
Допустим, что у нас есть книга с большим количеством листов, где на каждом листе находится таблица с данными по сделкам в этом городе:
Давайте будем исходить из следующих соображений:
- Структура и столбцов на всех листах одинаковая.
- Количество строк на всех листах разное.
- Листы могут в будущем добавляться или удаляться.
Наша задача — собрать все данные со всех листов в одну таблицу, чтобы потом с ней работать (фильтровать, сортировать, построить сводную и т.д.) Сделать это можно разными способами, но самыми удобными будут, пожалуй, 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} — номер строки (считая с нуля), откуда мы хотим взять данные
После фильтрации «мусора» все добавленные вспомогательные столбцы можно, конечно же, спокойно удалить, оставив только колонки Name и Data.
Шаг 3. Разворачиваем таблицы
Теперь развернём содержимое таблиц в одно целое, используя кнопку с двойными стрелками в заголовке столбца Data, отключив флажок Использовать исходное имя столбца как префикс (Use original column name as prefix):
После нажатия на ОК Power Query соберёт для нас все данные в одну мегатаблицу со всех отобранных листов нашего файла:
Останется лишь «навести блеск», а именно:
- Поднять первую строку в шапку таблицы кнопкой Использовать первую строку в качестве заголовков (Use first row as headers) на вкладке Главная (Home).
- Переименовать первый столбец в Город двойным щелчком на заголовку.
- Удалить повторяющиеся шапки таблиц, попавшие в одну кучу вместе с данными, используя фильтр по столбцу Товар.
Всё. Осталось только дать нашему запросу подходящее имя (например, Сборка) в панели справа и выгрузить затем собранные данные обратно в 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. Это, может, и не спортивно, но зато эффективно:
В общем, выбирайте любой удобный вам вариант и действуйте. Выбор — это всегда хорошо.
Ссылки по теме
- Что такое Power Query и с чем его едят.
- Как создавать свои макросы, использовать чужие и запускать их в своих файлах.
- Сборка данных из нескольких файлов с помощью Power Query.
Это продолжение перевода книги Кен Пульс и Мигель Эскобар. Язык М для Power Query. Главы не являются независимыми, поэтому рекомендую читать последовательно.
Предыдущая глава Содержание Следующая глава
В предыдущей главе были описаны методы агрегации данных из нескольких .txt или .csv файлов. В настоящей заметке описано, как объединять Таблицы или листы Excel из активной или внешней рабочей книги. К сожалению, стандартный пользовательский интерфейс Power Query этого не умеет. Но дополнительные манипуляции не будут слишком сложными. При этом методы работы с данными в активной книге отличаются от методов извлечения данных из внешнего файла.
Рис. 5.1. Доступные Таблицы в окне редактора Power Query
Скачать заметку в формате Word или pdf, примеры в формате архива
Объединение таблиц и диапазонов в текущем файле
Откройте файл с примерами Consolidate Tables—Start.xlsx. В файле три листа с информацией о подарочных сертификатах, выданных spa-салоном. Сотрудник, создавший файл, не указывал в Таблицах дату выпуска сертификатов, а размещал данные на отдельных листах по месяцам: Jan 2008, Feb2008, Mar 2008. Для анализа данные желательно объединить, и Power Query справится с этим быстрее, чем ручная обработка.
Создайте пустой запрос: пройдите по меню Данные –> Получить данные –> Из других источников –> Пустой запрос. В окне редактора Power Query в строке формул ведите (рис. 5.1):
=Excel.CurrentWorkbook()
Нажмите Enter. Вы увидите доступные объекты текущей книги: Таблицы, именованные диапазоны, подключения к внешним источникам данных. К сожалению, нельзя получить перечень листов файла.
Как вы узнали из главы 4, можно щелкнуть пробел рядом с зелеными словами в столбце Content для предварительного просмотра данных Table (рис. 5.2).
Рис. 5.2. Предварительный просмотр содержимого Table
В главе 4 вы также узнали, что кликнув на двуглавую стрелку в верхней части столбца Content, вы развернете содержимое Таблиц, сохраняя сведения из столбца Name. Итак, кликните двуглавую стрелку, в открывшемся окне настроек снимите флажок Использовать исходное имя столбца как префикс, нажмите Ok:
Рис. 5.3. Импорт и объединение данных с добавлением столбца с именем таблицы; чтобы увеличить изображение кликните на нем правой кнопкой мыши и выберите Открыть картинку в новой вкладке
Преобразуйте имена таблиц в даты (подробнее см. главу 4):
- Щелкните правой кнопкой мыши столбец Name –> Замена значений
- Заменить символ _ (подчеркивание) на ˽ 1,˽ (пробел, единица, запятая, пробел)
- Щелкните правой кнопкой мыши столбец Name –> Тип изменения –> Дата
- Перейдите на вкладку Преобразование –> Дата –> Месяц –> Конец месяца
- Щелкните правой кнопкой мыши столбец Name –> Переименовать –> Конец месяца
- Измените имя запроса на Подарочные сертификаты
Рис. 5.4. Финальный вид запроса
Перейдите на вкладку Главная и кликните Закрыть и загрузить. Объединенные данные будут размещены на новом листе Excel. К сожалению, запрос содержит кучу ошибок:
Рис. 5.5. Данные объединены на листе Excel; правда, вкрались ошибки
Не страшно. Наведите курсор мыши на запрос Подарочные сертификаты, и во всплывающем окне кликните Изменить. Снова откроется редактор Power Query. В области ПРИМЕНЕННЫЕ ШАГИ выберите первый шаг – Источник (цифра 1 на рис. 5.6). Вы заметите, что теперь у вас четыре таблицы в списке. Добавилась таблица Подарочные сертификаты, которая была создана в результате запроса. Чтобы избавиться от дублирования, необходимо добавить фильтрацию таблиц, участвующих в запросе. Кликните стрелочку возле названия столбца Name (2), выберите опцию Текстовые фильтры –> Не содержит. Подтвердите, что вы хотите вставить шаг. В окне Фильтрация строк выберите Не содержит – Подарочные (3):
Рис. 5.6. Фильтрация таблиц по имени
Нажмите Ok. В редакторе Power Query перейдите на вкладку Главная. Кликните кнопку Закрыть и загрузить. Теперь запрос содержит 62 строки; ошибок нет.
Существует и вторая возможность избавиться от ошибок – убрать дубли. Откройте редактор Power Query. Перейдите на шаг Измененный тип. Выберите столбец Name и на вкладке Главная кликните Удалить строки –> Удалить ошибки. Подтвердите, что вы хотите вставить новый шаг в середину запроса. На вкладке Главная кликните Закрыть и загрузить.
Объединение диапазонов и листов
Данные на листах Excel могут располагаться не в Таблицах. Напомню, что Power Query «не видит» листы Excel. Поэтому исходные данные можно организовать в именованные диапазоны. Это можно сделать, например, с помощью определения области печати. Трюк работает потому, что имя области печати является именем динамического диапазона.
Перейдите на лист Jan 2008. На вкладке Разметка страницы кликните Печатать заголовки. На закладке Лист введите A:D в поле Выводить на печать диапазон, кликните Ok.
Рис. 5.7. Выбор области печати
Повторите процедуру для листов Feb 2008 и Mar 2008. Создайте пустой запрос, и в строке формул введите: =Excel.CurrentWorkbook(). Нажмите Enter. Вы увидите список трех таблиц и трех именованных диапазонов:
Рис. 5.8. Объекты книги Excel, доступные для импорта в Power Query
Чтобы не дублировать данные, отфильтруйте столбец Name: Заканчивается на – печати. Нажмите кнопку Развернуть в верхней части столбца Content. Оставьте выбранными все столбцы, снимите флажок Использовать исходное имя столбца как префикс. Обратите внимание на отличия от предыдущего случая. Показаны все строки в выбранных столбцах диапазона печати:
Рис. 5.9. Необработанный рабочий лист
Выполним дополнительную очистку данных:
- Главная –> Удалить строки –> Удалить верхние строки –> 2
- Главная –> Использовать первую строку в качестве заголовков
- Столбец Cert Number –> Фильтр –> снимите флажок c null
- Щелкните правой кнопкой мыши столбец Cert Number –> Тип изменения –> Целое число
- Выберите столбец Cert Number
- Закладка Главная –> Удалить строки –> Удалить ошибки
- Выберите столбец Cert Number. Удерживайте нажатой клавишу Shift выберите столбец Service
- Щелкните правой кнопкой мыши один из выбранных заголовков столбцов –> Удалить другие столбцы
- Измените имя запроса на Все листы
- Главная –> Закрыть и загрузить
При работе с областями печати рекомендуется ограничивать область печати необходимыми строками и столбцами. В примере выше мы выбрали целиком столбцы, что привело к импорту в Power Query около 3 млн. строк с трех листов. Наверное, вы заметили, как медленно выполнялись некоторые команды!
Агрегирование данных из других книг
Вам нужно создать список книг Excel и извлечь их содержимое, аналогично тому, что вы сделали в главе 4, когда вы извлекли содержимое файлов CSV.
Создайте новую книгу Excel. Создать новый запрос: Данные –> Получить данные –> Из файла –> Из папки. Выберите папку Source Files. В списке есть как файлы Excel, так и иные файлы:
Рис. 5.10. Файлы, доступные в папке Source Files
Нажмите Преобразовать данные, и отфильтруйте файлы Excel:
- Щелкните правой кнопкой мыши столбец Extension –> Преобразование –> нижний регистр
- Фильтр столбца Extension –> Текстовые фильтры –> Начинается с… –> .xlsx
- Выберите столбцы Content имя Name –> щелкните правой кнопкой мыши –> Удалить другие столбцы
У вас может возникнуть соблазн нажать кнопку Объединить файлы…
Рис. 5.11. Объединить файл
… и, к сожалению, Power Query позволит вам это сделать. Однако, вы обнаружите, что Power Query сделает что-то весьма странное. Чтобы откатить импорт, перейдите в область ПРИМЕНЕННЫЕ ШАГИ и удалите все шаги после шага Другие удаленные столбы.
Раз вы не можете объединить и импортировать файлы простым методом, пойдем трудным способом:
- В редакторе Power Query перейдите на вкладку Добавление столбца –> Настраиваемый столбец
- Введите формулу =Excel.Workbook([Content])
- Нажмите кнопку Ok
- Щелкните правой кнопкой мыши столбец Content –> Удалить
Новый пользовательский столбец содержит все объекты, к которым можно подключиться, включая все Таблицы Excel, именованные диапазоны и даже листы:
Рис. 5.12. Объекты, доступные для импорта
Столбец Пользовательская имеет двуглавую стрелку (значок расширения), поэтому его можно развернуть. Нажав на значок вы получаете список всех объектов трех файлов, доступных для импорта:
Рис. 5.13. Объекты, доступные для импорта
Столбец Kind показывает, что у вас есть Листы, определенное имя и Таблицы. Если не отфильтровать этот перечень объектов, у вас будет много дублей:
- Отфильтруйте столбец Kind, оставив только Sheet
- Отфильтруйте столбец Name, удалив файл Named Range.xlsx
- Выберите столбцы Name, Name.1 и Data –> щелкните правой кнопкой мыши на заголовке одного из этих столбцов –> Удалить другие столбцы
- Кликните кнопку Развернуть у заголовка столбца Data (снимите настройки префикса)
Запрос теперь выглядит следующим образом:
Рис. 5.14. Запрос с шестью импортированными объектами Sheet
Преобразуем данные:
- Главная –> Использовать первую строку в качестве заголовков
- Щелкните правой кнопкой мыши на заголовке столбца Workbookxlsx –> Переименовать –> Source File
- Щелкните правой кнопкой мыши заголовке столбца Jan 2008 column –> Переименовать –> Month
- Выберите столбец Amount –> Главная –> Удалить строки –> Удалить ошибки
- Измените имя запроса FromExcelFiles
- Главная –> Закрыть и загрузить
Данные загружаются в Таблицу на листе Excel. На их основе можно создать сводную таблицу, чтобы увидеть, что вы смогли извлечь из внешних файлов Excel:
Рис. 5.15. Сводная позволяет проверить, что же вы импортировали
Видно, что вы успешно извлекли данные из двух Excel-файлов, каждый из которых содержит по три листа. В общей сложности извлекли более 12 000 записей.
Подытожим
Функция Excel.CurrentWorkbook() считывает все объекты текущего файла. Поскольку она является первой в применяемых шагах запроса, вы получаете эффект рекурсии. При обновлении Power Query добавит объекты, созданные в процессе выполнения запроса, к тем, что существовали первоначально. Стратегии защиты заключается в фильтрации объектов по имени или фильтрации ошибок в ключевых столбцах. Тестируйте метод фильтрации с помощью нескольких команд Обновить все.
Функция Excel.Workbook([Content]) не вызывает проблем с рекурсией, поскольку исходные данные считываются из внешних книг, а результаты запроса сохраняются в текущей книге. Но функция Excel.Workbook([Content]) создает иную проблему: она извлекает листы в дополнение к диапазонам и таблицам. Это может приводить к дублированию данных. Обратите особое внимание на фильтрацию столбца Kind (вид), чтобы избежать этой проблемы. Даже если при построении запроса в книге имеется только один вид данных, полезно применить фильтрацию, чтобы защитить решение от будущих изменений.
Merging data into a single sheet is a crucial and significant skill to know. For example, you have the monthly sales of a company in the 12 worksheets of excel. Now you want to calculate the net revenue made in the entire year. So, we need to merge all the data in the 12 excel sheets, this task could be easily achieved by power query in excel. Let’s learn how to merge data from all sheets in a selected file using a power query.
Power Query
Power Query is one of the very powerful tools in excel. Some important points of power query are:
- Power query can save more than 50% of your time.
- Power query comes with triple power. It has functionalities of Advance Excel, SQL, and VBA.
- VLOOKUP function can be used in just a few mouse clicks.
- If you are using an excel version greater than 2016 then you will get a built-in power query. For versions older than this, the power query needs to be added separately.
Power query is already built-in in excel. Go to Data Tab, Get & Transform Data, and Queries & Connections section is the power query for users having the 2019 excel version.
Merging data from all sheets in a file
The best way to understand merging sheets in a file is by an example, given a data set of three worksheets sheet1, sheet2, and sheet3. Each sheet contains a table name mid_sem_1, mid_sem_2 and end_sem respectively. The table in sheet1 has columns as Roll No. , Name, and Mid Sem 1 marks. The table in sheet2 has columns as Roll No., Mid Sem 2 marks. The table in sheet3 has columns as Name and End Sem marks. The name of this workbook is geeks_for_geeks.xlsx.
Following are the steps to merge all the sheets in the selected file:
Step 1: Press Ctrl + N to create a new file. Go to the Data tab, and click on Get Data.
Step 2: Go to From File and click on From Workbook.
Step 3: Open file geeks_for_geeks.xlsx. A navigator dialogue box appears.
Step 4: Select the tables you want to transform and merge data from different excel sheets.
Step 5: A power query editor appears. Go to the mid_sem_1 table.
Step 6: In the home tab, click on Merge Queries. A dialogue-box name Merge appears.
Step 7: Select the table you want to merge with mid_sem_1. For example, mid_sem_2.
Step 8: Select the column that is common in both tables. For example, Roll No. is the attribute that is common in both tables. Click Ok.
Step 9: A new column in table mid_sem_1 is added. The name of the attribute is mid_sem_2.
Step 10: Click on the double-sided arrow and select the columns you want to add to this table. Uncheck the box Use the original column name as a prefix to have the original column names in your table.
Step 11: The mid sem 2 marks get appended in your table name mid_sem_1.
Step 12: Repeat step 6. Go to the home tab and click on Merge Queries. A Merge dialogue box appears. Select the table name end_sem. Now, select the column which is common in the mid_sem_1 and end_sem table. Click Ok.
Step 13: A column name end_sem appears in mid_sem_1 table. Click on the double-sided arrow. Select the column you want to add to the merged table. For example, End sem marks. Uncheck the box Use the original column name as a prefix. Click Ok.
Step 14: A new column name End sem Marks is appended in the table name mid_sem_1.
Step 15: Sort the Roll No. in ascending order.
Step 16: The table is ready. In the home tab, click on Close & Load.
Step 17: The merged table is created in sheet name mid_sem_1. We can see that there is a total of 4 worksheets. The 3 worksheets are redundant. Delete all the worksheets except the sheet name mid_sem_1. Rename the sheet name from mid_sem_1 to final_result.
Step 18: The final merged table appears.
Файлы к уроку:
- Для спонсоров Boosty
- Для спонсоров VK
Ссылки:
- Страница курса
- Плейлист YouTube
- Плейлист ВК
Описание
В этом уроке мы научимся объединять все таблицы одной книги Excel друг за другам, т. е. по вертикали с помощью Power Query.
В этом уроке вы узнаете/повторите:
- Функция Excel.CurrentWorkbook
- Как объединить все таблицы из одного файла Excel друга за другом по вертикали
- Разберем некоторые тонкости объединения/консолидации/комбинирования таблиц одной книги Excel друг за другом в Power Query
Решение
Решение можно разбить на несколько шагов:
- Подключение к файлу Excel
- В таблице с доступными источниками оставить только табличный столбец с нужными данными
- Развернуть это табличный столбец
Примененные функции
- Excel.CurrentWorkbook
- Table.SelectRows
- Table.SelectColumns
- Table.ExpandTableColumn
- Table.TransformColumnTypes
Код
let
// Подключаемся к файлу Excel
source = Excel.CurrentWorkbook(),
// Выбираем только столбец, в котором находится таблица
rows_select = Table.SelectRows(source, each ([Name] <> "Добавлено")),
cols_select = Table.SelectColumns(rows_select, {"Content"}),
// Разворачиваем табличный столбец и указываем типы данных
table_expand = Table.ExpandTableColumn(
cols_select,
"Content",
{
"Дата",
"Агент",
"ФИО",
"Город",
"ТУ",
"Категория льготы",
"Контакты#(lf)льготника",
"ГБУЗ"
},
{
"Дата",
"Агент",
"ФИО",
"Город",
"ТУ",
"Категория льготы",
"Контакты#(lf)льготника",
"ГБУЗ"
}
),
types = Table.TransformColumnTypes(
table_expand,
{
{"Дата", type date},
{"Агент", Int64.Type},
{"ФИО", type text},
{"Город", type text},
{"ТУ", Int64.Type},
{"Категория льготы", type text},
{"Контакты#(lf)льготника", type text},
{"ГБУЗ", type text}
}
)
in
types
Этот урок входит в Базовый курс Power Query
Номер урока | Урок | Описание |
---|---|---|
1 | Зачем нужен Power Query. Обзор возможностей | Этот урок сам по себе является мини-курсом. Здесь вы узнаете для каких видов операций с данными создан Power Query. |
2 | Подключение Excel | Подключаемся к файлам Excel. Импортируем данные из таблиц, именных диапазонов, динамических именных диапазонов. |
3 | Подключение CSV/TXT, таблиц, диапазонов | Подключаемся к к файлам CSV/TXT, Excel. |
4 | Объединить таблицы по вертикали | Учимся объединять две таблицы по вертикали — combine. |
5 | Объединить по вертикали все таблицы одной книги друг за другом | Как объединить по вертикали все таблицы одной книги, находящиеся на разных листах Excel. |
6 | Объединить по вертикали все файлы в папке | Объединяем по вертикали таблицы, которые находятся в разных файлах в одной папке. |
7 | Объединение таблиц по горизонтали | Учимся объединять таблицы по горизонтали — JOIN, merge. |
8 | Объединить таблицы с агрегированием | Объединить таблицы по горизонтали и сразу выполнить группировку с агрегированием — JOIN + GROUP BY. |
9 | Анпивот (Unpivot) | Изучаем операцию Анпивот — из сводной таблицы делаем таблицу с данными. |
10 | Многоуровневый анпивот (Анпивот с подкатегориями) | Более сложный вариант Анпивота — в строках находится несколько измерений. |
11 | Скученные данные | Данные собраны в одном столбце, нужно правильно его разбить на несколько. |
12 | Скученные данные 2 | Разбираем еще один пример скученных данных. |
13 | Ссылка на другую строку | Как сослаться на другую строку. |
14 | Ссылка на другую строку 2 | Как сослаться на другую строку, используя объединение по горизонтали. |
15 | Виды объединения таблиц по горизонтали | Изучаем виды объединения таблиц по горизонтали — LEFT JOIN, FULL JOIN, INNER JOIN, CROSS JOIN. |
16 | Виды объединения таблиц по горизонтали 2 | Изучаем анти-соединение и соединение таблицы с ней же самой — ANTI JOIN, SELF JOIN. |
17 | Группировка | Изучаем операцию группировки с агрегированием — GROUP BY. |
18 | Консолидация множества таблиц пользовательской функцией | Объединяем по вертикали множество таблиц с предварительной обработкой при помощи пользовательской функции. |
19 | Деление на справочник и факт | Разделим один датасет на два датасета: справочник и факт. |
20 | Создание параметра | Мы можем ввести значение в какую-то ячейку Excel, а потом передать это значение в формулу Power Query. |
21 | Таблица параметров | Создадим целую таблицу параметров и будем их использовать в запросах Power Query. |
22 | Объединение таблиц по вертикали, когда не совпадают заголовки столбцов | Как объединить две таблицы по вертикали, если названия столбцов не совпадают. |
23 | Поиск ключевых слов | Научимся искать ключевые слова в текстовом поле. |
24 | Поиск ключевых слов 2 | Будем искать ключевые поля в текстовом поле и присваивать этому значению какую-то категорию. |
Вы работали со сводными таблицами Excel? Если нет – нужно срочно начинать. Это супер-инструмент, который позволяет быстро и просто обрабатывать большие объемы данных. А если вы с ними все-таки работали, то я как экстрасенс-капитан-очевидность могу точно сказать, что вы сталкивались с ситуацией, когда нужно построить сводную таблицу на основе нескольких источников данных. Например, с помощью нескольких одинаковых таблиц Excel, копируя их одну под другой. Или дополняя свою таблицу новыми столбцами и аналитиками.
Добавление или объединение таблиц?
Чаще всего, чтобы объединить данные в Excel, пользователи копируют таблицы одну под другую. Или пишут формулы по типу ВПР, если в таблицу нужно добавить новые столбцы или аналитики. Но вы наверняка знаете, что самый удобный инструмент для объединения данных в Excel – это Power Query. Там есть два принципиальных способа:
- По вертикали – добавление таблицы под таблицу. Полезно, когда таблицы с одинаковой шапкой находятся в разных файлах или на разных листах.
- По горизонтали – слияние таблиц, похожее на ВПР. А здесь есть еще варианты — не только аналогичные ВПР, но и ВПР-наоборот, и ВПР-неВПР… Целых шесть видов объединения таблиц.
Разберем, чем эти способы отличаются друг от друга.
Вариант 1. Добавление таблицы под таблицу
Приём с добавлением таблиц применяется, когда у вас есть несколько таблиц с одинаковой шапкой, но они находятся в разных местах, например на разных листах или в нескольких файлах. Тогда, чтобы построить итоговую сводную, мы можем просто строки одной таблицы добавить в другую. Обращаю внимание, что здесь данные таблиц объединяются как-бы по вертикали.
Как на основе таблиц с одинаковой шапкой построить единую базу? Добавив таблицы одну под другую
Раньше процедуру добавления строк из одной таблицы в другую можно было выполнить с помощью копирования. Отсюда много ручной работы при внесении новых данных (ну, или писали макросы). Однако с момента появления в Excel надстройки Power Query у нас появилась возможность добавлять таблицы одну под другую несколькими щелчками мыши. Как это сделать – смотрите в видео.
Вариант 2. Объединение таблиц
Объединение таблиц применяется, когда у вас есть две таблицы (шапки у них скорее всего разные), и одна таблица дополняет другую. Например, в отчете продажи показаны по городам, а у вас просят вывести информацию по областям. Тогда потребуется объединение по горизонтали:
Одна таблица дополняет другую с помощью объединения по общему столбцу
В «обычном» Excel это делается с помощью формулы ВПР или других формул с похожим функционалом. Power Query предлагает нам больше способов объединения. Используя этот инструмент, мы можем не «просто» связать таблицы, но и сделать это по определенным условиям.
Типы объединения данных в Power Query
Power Query предлагает на выбор шесть различных способов соединения таблиц. Если посмотреть теорию про объединение данных, вы наверняка встретите примеры рисунков с кругами – схематичным изображением множеств или таблиц, которые мы хотим объединить.
- Внешнее соединение слева (все из первой таблицы, совпадающие из второй)
- Внешнее соединение справа (все из второй таблицы, совпадающие из первой)
- Полное внешнее (все строки из обеих таблиц)
- Внутреннее (только совпадающие строки)
- Анти-соединение слева (только строки в первой таблице)
- Анти-соединение справа (только строки во второй таблице)
Внешнее соединение справа
Разберем в способы объединения данных на примерах.
Внешнее соединение слева
Left Outer Join
Внешнее соединение слева наиболее часто применяется для объединения таблиц. Это то, что мы делаем в Excel с помощью формулы ВПР – из одной таблицы «перетаскиваем» данные в другую.
Когда вы выбираете «Внешнее соединение слева», к данным из первой таблицы добавляются все значения из второй таблицы, соответствующие столбцу поиска. Если во второй таблице нет искомых значений, вы получите null или «пусто».
Пример: объединим план продаж в штуках с плановыми ценами.
Добавьте таблицы в Power Query: вкладка Данные → Получить данные → Из других источников → Из таблицы / диапазона, или для новых версий Excel: вкладка Данные → Из таблицы / диапазона. Объедините запросы: вкладка Главная → Объединить запросы, выберите столбец слияния «Товар» и тип объединения «Внешнее соединение слева». На некоторые товары нет плановых цен, поэтому после объединения в столбце «цена» для этих товаров будет проставлен null.
Хотя в диалоговом окне таблицы расположены одна под другой (просто так удобнее технически), связь все равно горизонтальная. В диалоговом окне указывается столбец, по которому выполняется объединение.
Внешнее соединение справа
Right Outer Join
Тип соединения «Внешнее соединение справа» используется, если в первую таблицу нужно не только добавить новые столбцы, но и отфильтровать её. Вторая таблица используется как источник данных и управляет содержимым первой таблицы.
Что происходит, когда вы выбираете «Внешнее соединение справа»: из первой таблицы исчезнут все не найденные во второй таблице данные. Из второй таблицы будут добавлены те значения, которых нет в первой. Если посмотреть на рисунок, видно, что Внешнее соединение справа работает так же, как и Внешнее соединение слева, отличается только порядок расположения таблиц.
Пример: в первой таблице — ожидаемые среднемесячные продажи на одного покупателя, во второй – количество потенциальных покупателей. Объединим таблицы, чтобы запланировать будущие продажи.
Объединим таблицы, чтобы запланировать будущие продажи. Общий столбец для поиска — «Направление».
В результате объединения из таблицы «исчезли» данные по направлениям, где нет потенциальных покупателей.
Полное внешнее соединение
Full Outer Join
Этот тип соединения создает таблицу, в которой есть все строки и первой, и второй таблицы. С помощью общего столбца объединяются все строки таблиц.
Пример: в первой таблице приведен объем производства по дням, во второй – объем брака. Создадим общую таблицу.
Для создания общей таблицы используется Полное внешнее соединение. Для объединения используем общий столбец «дата». В результате получится отчет с датами и цифрами из первой и второй таблицы. В ячейках, где данные за аналогичные периоды были только в первой или только во второй таблице, стоит null.
Внутреннее соединение
Inner Join
Внутреннее соединение находит и оставляет только совпадающие строки из обеих таблиц. Если данные есть в одной из таблиц, но нет в другой, то в объединенном запросе они не появятся.
Таблицы объединяются с помощью общего столбца. При этом из первой таблицы исчезнут все не найденные в «общем» столбце второй таблицы строки. Из второй таблицы – исчезнут не найденные в первой.
Пример: есть два списка покупателей, принявших участие в акциях А и Б – по одному для каждой из акций. С помощью Внутреннего соединения получим список покупателей, участвовавших и в той, и в другой акции.
Поиск выполняется по общему столбцу «Покупатель». Результат — список покупателей, участвовавших в обеих акциях.
Анти-соединение слева
Left Anti Join
Если вам требуется исключить из таблицы ненужные строки, можно воспользоваться объединением с Анти-соединением слева. С помощью этого способа из первой таблицы будут исключены все строки, найденные во второй.
Пример: в первой таблице – записи о сделанных покупателям коммерческих предложениях, во второй – данные о продажах. С помощью Анти-соединения слева найдем покупателей, которые получили предложение, но не сделали покупку.
С помощью запроса исключим из первой таблицы найденных во второй покупателей. В результате получится список покупателей, которые не сделали покупки.
Анти-соединение справа
Right Anti Join
Анти-соединение справа работает так же, как и Анти-соединение слева. Разница здесь только в порядке расположения таблиц.
Пример: в первой таблице – отчет о выполненных задачах, во второй – список поставленных задач. Объединив таблицы с помощью Анти-соединения справа, найдем невыполненные задачи.
В результате объединения получим список невыполненных задач.
Кроме объединения таблиц с помощью запросов Power Query, такие операции можно выполнять и с помощью DAX-формул, применяя их в различных сочетаниях: GENERATEALL, NATURALLEFTOUTERJOIN, NATURALINNERJOIN, CROSSJOIN, FILTER+CROSSJOIN, GENERATE, EXCEPT и др.
Power Query умеет подключаться к разным источникам. Далее рассмотрим, как получить данные из книги Excel.
Лучше всего данные хранить в таблице Excel, это самый удобный и распространенный источник для Power Query. На ленте даже есть специальная кнопка.
Чтобы загрузить таблицу в редактор Power Query, достаточно выделить любую ее ячейку и нажать Данные → Получить и преобразовать данные → Из таблицы/диапазона.
Примечание. В вашей версии Excel расположение кнопок и их названия могут отличаться.
Если то же самое проделать с обычным диапазоном, то Excel вначале преобразует диапазон в таблицу Excel, а потом запустит Power Query.
Запросу присваивается имя таблицы Excel, которая является источником данных. Поэтому желательно сразу дать таблице говорящее название. Не обязательно, конечно, но желательно. В противном случае рекомендуется переименовать сам запрос, чтобы затем его можно было легко найти среди других запросов книги.
Данные находятся в Power Query. Новые значения, внесенные в исходную таблицу, автоматически попадут в запрос после его обновления. Далее в редакторе Power Query делают обработку данных и выгружают либо в виде таблицы Excel, либо оставляют в памяти Excel в виде подключения.
Именованный диапазон Excel
Источником для Power Query может быть не только таблица Excel. Например, вы получили красивый отформатированный отчет и не хотите вносить в него изменения. Тогда нужно использовать именованный диапазон. Самый простой способ создать именованный диапазон – это выделить область на листе и ввести название в поле Имя.
Либо выполнить команду Формулы → Определенные имена → Присвоить имя. В Excel будет создан новый объект, к которому можно обращаться, например, в формулах. Диапазон виден в Диспетчере имен.
Здесь перечислены все именованные диапазоны, формулы и таблицы. Среди них есть и только что созданный Отчет.
Теперь можно стать на любую ячейку внутри именованного диапазона (или выбрать его из выпадающего списка в поле Имя) и вызвать ту же команду: Данные → Получить и преобразовать данные → Из таблицы/диапазона. Произойдет загрузка данных в Power Query.
Такой способ позволяет «не портить» исходные данные. Но у него есть и очевидный недостаток: новые строки, которые выйдут за пределы именованного диапазона, не попадут в запрос.
Динамический именованный диапазон Excel
Решить данную проблему можно, создав динамический именованный диапазон. Это такой диапазон, который задается формулой и автоматически расширяется до последней заполненной ячейки.
Внести статичное имя в поле Имя на этот раз не получится. Поэтому заходим в Формулы → Определенные имена → Задать имя (или нажимаем Создать в Диспетчере имен), указываем название будущего динамического диапазона ДинамОтчет и внизу вместо ссылки записываем формулу:
=$A$2:ИНДЕКС($B:$B;ПОИСКПОЗ(99^99;$B:$B))
Ко всем ссылкам этой формулы Excel еще автоматически добавит название листа.
Смысл формулы следующий. Верхняя левая ячейка диапазона фиксируется ($A$2), а правая нижняя определяется формулой, которая возвращает адрес последней заполненной строки в столбце B.
Но не все так просто. Excel видит это имя лишь как формулу, а не диапазон. Как же его увидит Power Query? Делаем ход конем.
Создаем пустой запрос Power Query Данные → Получить и преобразовать данные → Получить данные → Из других источников → Пустой запрос. Открывается пустой запрос, где в строке формул нужно ввести:
= Excel.CurrentWorkbook()
После ввода формулы (нажатием Enter) Power Query обратится к текущей книге и выведет все объекты, среди которых есть и наш динамический диапазон ДинамОтчет.
Название запроса не подхватывается, поэтому придется изменить самостоятельно.
Чтобы извлечь содержимое объекта, в этой же строке правой кнопкой мыши кликаем по Table, далее выбираем Детализация.
Power Query разворачивает таблицу и даже делает некоторые шаги обработки: повышает заголовки и задает нужный формат для столбцов.
Теперь в запрос будут попадать новые строки, несмотря на то, что исходные данные не являются таблицей Excel.
Вот такие приемы импорта данных в Power Query из книги Excel. Самый распространенный из них – это импорт из таблицы Excel. Тем не менее, в случае необходимости можно прибегнуть к альтернативам, создав именованный или динамический именованный диапазон.
Консолидация данных из разных таблиц Excel
Одна из насущных задач, с которыми сталкиваются пользователи, – консолидация данных. Под консолидацией понимается объединение нескольких таблиц в одну. До появления Power Query это была довольно трудоемкая операция, особенно, если процесс требовал автоматизации. Хотя в эксель есть специальная команда Данные → Работа с данными → Консолидация, пользоваться ей не удобно. Мне, по крайней мере. Появление Power Query в корне изменило представление о том, как нужно объединять таблицы.
Рассмотрим пример. В некоторый файл каждый месяц вносится отчет о продажах в формате таблицы Excel. Каждая таблица при этом имеет соответствующее название: Январь_2018, Февраль_2018 и т.д. Необходимо объединить все таблицы книги в одну. Как бы скопировать и вставить одну под другой, создав при этом дополнительный столбец, указывающий, к какой таблице принадлежит конкретная строка. Задача не одноразовая, а с заделом на будущее, поэтому нужно предусмотреть появление в этом файле новых таблиц.
Процесс начинается с запуска пустого запроса: Данные → Получить и преобразовать данные → Создать запрос → Из других источников → Пустой запрос
Затем в строке формул вводим знакомую команду
= Excel.CurrentWorkbook()
Power Query показывает все таблицы в текущей книге.
Их нужно развернуть кнопкой с двумя стрелками в названии поля Content (на скриншоте ниже выделено красным кружком).
Если есть лишние столбцы, то их можно не выводить, сняв соответствующую галку. Также лучше убрать галку напротив опции Использовать исходное имя столбца как префикс. Нажимаем Ok.
Все таблицы находятся на одном листе, а рядом колонка с названием источника, откуда взята каждая строка.
Данные загружены. Можно приступать к их обработке. Ограничимся преобразованием названий таблиц в настоящую дату, чтобы затем использовать для сведения данных по месяцам.
Визуально мы наблюдаем и месяц, и год. Но Power Query такое название воспринимает, как текст. Поэтому делаем следующее.
Удалим нижнее подчеркивание. Правой кнопкой мыши по названию столбца Name → Замена значений.
В следующем окне настроек указываем, что меняем _ на пусто, то есть в нижнем поле ничего не указываем.
Подчеркивание удаляется из названия.
Поиск и замена здесь работает так же, как и в обычном Excel.
Далее запускаем команду Преобразование → Столбец «Дата и время» → Дата → Выполнить анализ.
Power Query распознает дату и меняет формат колонки. Мы также переименовываем столбец на Период.
Полученную таблицу можно использовать для анализа данных. Выгрузим ее на лист Excel.
Главная → Закрыть и загрузить.
Но что-то пошло не так. Во-первых, внизу таблицы пустая строка; во-вторых, при выгрузке произошла одна ошибка. Обновим запрос (справа от названия запроса значок обновления).
Что-то еще больше пошло не так. Даты исчезли, снизу таблицы добавились новые строки, а количество ошибок уже 19. Спокойствие, только спокойствие! Дело вот в чем.
Помните, на первом шаге мы получили все таблицы из файла? Так ведь и выгруженная таблица – это тоже таблица! Получается, Power Query взял 3 исходных таблицы, обработал, выгрузил на лист Excel и на следующем круге видит уже 4 таблицы!
При повторном обновлении запрос захватывает их все, а т.к. таблица выхода имеет другую структуру, то возникают ошибки.
Короче, из запроса нужно исключить таблицу, которая получается на выходе (Запрос1). Есть разные подходы, самый простой – это добавить шаг фильтрации. Выделяем в правой панели первый шаг Источник, открываем фильтр в колонке с названиями, снимаем галку с таблицы Запрос1 → Ok.
Снова выгружаем таблицу в Excel и на этот раз все в порядке.
Сделаем с помощью сводной таблицы маленький отчет по месяцам.
Прошло время, и в файл добавили новую таблицу с продажами за апрель.
Требуется обновить сводный отчет. Представьте на минуту, как это происходит в обычном Эксель: таблица копируется в самый низ общего источника, продлевается колонка с датой, изменяется диапазон для сводной таблицы, обновляется весь отчет.
А вот, как это выглядит при использовании Power Query.
Достаточно два раза нажать кнопку Обновить все (первый раз – для обновления запроса, второй – для сводной таблицы).
На добавление в отчет новых данных вместе с их обработкой потребовалось несколько секунд.
Вот за это мы так любим Power Query.
↓ Скачать файл с примером ↓
Поделиться в социальных сетях:
Содержание
- Каждая книга содержит данные в таблице Excel с одинаковой структурой.
- В каждой книге есть данные с одинаковым именем листа.
- В каждой книге есть данные с разными именами таблиц или именами листов.
Power Query может оказаться большим подспорьем, если вы хотите объединить несколько книг в одну.
Например, предположим, что у вас есть данные о продажах для разных регионов (Восток, Запад, Север и Юг). Вы можете объединить эти данные из разных книг в один лист с помощью Power Query.
Если у вас есть эти книги в разных местах / папках, рекомендуется переместить все их в одну папку (или создать копию и поместить эту копию книги в ту же папку).
Итак, для начала у меня есть четыре книги в папке (как показано ниже).
В этом руководстве я рассмотрю три сценария, в которых вы можете объединить данные из разных книг с помощью Power Query:
- Каждая книга содержит данные в таблице Excel, и все имена таблиц одинаковы.
- В каждой книге есть данные с одинаковым именем листа. Это может быть в том случае, если во всех книгах есть лист с именем «сводка» или «данные», и вы хотите объединить все это.
- В каждой книге много листов и таблиц, и вы хотите объединить определенные таблицы / листы. Этот метод также может быть полезен, если вы хотите объединить таблицы / листы, у которых нет согласованного имени.
Давайте посмотрим, как объединить данные из этих книг в каждом случае.
Приведенный ниже метод будет работать, если ваши таблицы Excel имеют одинаковую структуру (те же имена столбцов).
Количество строк в каждой таблице может быть разным.
Не беспокойтесь, если в некоторых таблицах Excel есть дополнительные столбцы. Вы можете выбрать одну из таблиц в качестве шаблона (или в качестве «ключа», как его называет Power Query), и Power Query будет использовать ее для объединения с ней всех других таблиц Excel.
Если в других таблицах есть дополнительные столбцы, они будут проигнорированы, и будут объединены только те, которые указаны в шаблоне / ключе. Например, если выбранная таблица шаблона / ключа имеет 5 столбцов, а одна из таблиц в какой-либо другой книге имеет 2 дополнительных столбца, эти дополнительные столбцы будут проигнорированы.
Теперь у меня есть четыре книги в папке, которые я хочу объединить.
Ниже приведен снимок таблицы, которая есть у меня в одной из рабочих тетрадей.
Вот шаги, чтобы объединить данные из этих книг в одну книгу (в виде единой таблицы).
- Перейдите на вкладку «Данные».
- В группе «Получить и преобразовать» щелкните раскрывающееся меню «Новый запрос».
- Наведите курсор на «Из файла» и нажмите «Из папки».
- В диалоговом окне «Папка» введите путь к папке, в которой находятся файлы, или нажмите «Обзор» и найдите папку.
- Щелкните ОК.
- В открывшемся диалоговом окне нажмите кнопку объединения.
- Щелкните «Объединить и загрузить».
- В открывшемся диалоговом окне «Объединить файлы» выберите таблицу на левой панели. Обратите внимание, что Power Query показывает вам таблицу из первого файла. Этот файл будет действовать как шаблон (или ключ) для объединения других файлов. Power Query теперь будет искать «Таблицу 1» в других книгах и объединять ее с этой.
- Щелкните ОК.
Это загрузит окончательный результат (объединенные данные) в ваш активный рабочий лист.
Обратите внимание, что вместе с данными Power Query автоматически добавляет имя книги в качестве первого столбца объединенных данных. Это помогает отслеживать, какие данные были получены из какой книги.
Если вы хотите сначала отредактировать данные перед загрузкой в Excel, на шаге 6 выберите «Объединить и отредактировать». Это откроет окончательный результат в редакторе Power Query, где вы сможете редактировать данные.
Несколько вещей, которые нужно знать:
- Если вы выберете таблицу Excel в качестве шаблона (на шаге 7), Power Query будет использовать имена столбцов в этой таблице для объединения данных из других таблиц. Если в других таблицах есть дополнительные столбцы, они будут проигнорированы. Если в этих других таблицах нет столбца, который есть в вашей таблице шаблонов, Power Query просто поместит для него «null».
- Столбцы необязательно располагать в том же порядке, в котором Power Query использует заголовки столбцов для сопоставления столбцов.
- Поскольку вы выбрали Table1 в качестве ключа, Power Query будет искать Table1 во всех книгах и объединять все это. Если он не найдет таблицу Excel с таким же именем (Таблица1 в этом примере), Power Query выдаст ошибку.
Добавление новых файлов в папку
Теперь давайте займемся минутой и поймем, что мы сделали с вышеуказанными шагами (что заняло у нас всего несколько секунд).
Мы объединили данные из четырех разных книг в одну таблицу за несколько секунд, даже не открывая никаких книг.
Но это не все.
Настоящая МОЩНОСТЬ Power Query заключается в том, что теперь, когда вы добавляете больше файлов в папку, вам не нужно повторять ни один из этих шагов.
Все, что вам нужно сделать, — переместить новую книгу в папку, обновить запрос, и он автоматически объединит данные из всех книг в этой папке.
Например, в приведенном выше примере, если я добавлю новую книгу — ‘Mid-West.xlsx’ в папку и обновите запрос, он сразу же предоставит мне новый комбинированный набор данных.
Вот как обновить запрос:
В каждой книге есть данные с одинаковым именем листа.
Если у вас нет данных в таблице Excel, но все имена листов (из которых вы хотите объединить данные) одинаковы, вы можете использовать метод, показанный в этом разделе.
Есть несколько вещей, с которыми нужно быть осторожными, когда это просто табличные данные, а не таблица Excel.
- Имена рабочих листов должны быть такими же. Это поможет Power Query просмотреть ваши книги и объединить данные из листов с одинаковыми именами в каждой книге.
- Power Query чувствителен к регистру. Это означает, что таблицы с именами «данные» и «данные» считаются разными. Точно так же столбец с заголовком «Магазин» и столбец с заголовком «Магазин» считаются разными.
- Несмотря на то, что заголовки столбцов должны совпадать, не обязательно иметь одинаковый порядок. Если столбец 2 в «East.xlsx» является столбцом 4 в «West.xlsx», Power Query будет правильно сопоставить его, сопоставив заголовки.
Теперь давайте посмотрим, как быстро объединить данные из разных книг, у которых имя листа совпадает.
В этом примере у меня есть папка с четырьмя файлами.
В каждой книге у меня есть рабочий лист с названием «Данные», который содержит данные в следующем формате (обратите внимание, что это не таблица Excel).
Вот шаги, чтобы объединить данные из нескольких книг в один рабочий лист:
- Перейдите на вкладку «Данные».
- В группе «Получить и преобразовать» щелкните раскрывающееся меню «Новый запрос».
- Наведите курсор на «Из файла» и нажмите «Из папки».
- В диалоговом окне «Папка» введите путь к папке, в которой находятся файлы, или нажмите «Обзор» и найдите папку.
- Щелкните ОК.
- В открывшемся диалоговом окне нажмите кнопку объединения.
- Щелкните «Объединить и загрузить».
- В открывшемся диалоговом окне «Объединить файлы» выберите «Данные» на левой панели. Обратите внимание, что Power Query показывает имя рабочего листа из первого файла. Этот файл будет действовать как ключ / шаблон для объединения других файлов. Power Query просмотрит каждую книгу, найдет лист с именем «Данные» и объединит все это.
- Щелкните ОК. Теперь Power Query просмотрит каждую книгу, найдет в ней лист с именем «Данные», а затем объединит все эти наборы данных.
Это загрузит окончательный результат (объединенные данные) в ваш активный рабочий лист.
Если вы хотите сначала отредактировать данные перед загрузкой в Excel, на шаге 6 выберите «Объединить и отредактировать». Это откроет окончательный результат в редакторе Power Query, где вы сможете редактировать данные.
В каждой книге есть данные с разными именами таблиц или именами листов.
Иногда вы не можете получить структурированные и согласованные данные (например, таблицы с тем же именем или рабочий лист с тем же именем).
Например, предположим, что вы получаете данные от кого-то, кто создал эти наборы данных, но назвал рабочие листы как Восточные данные, Западные данные, Северные данные и Южные данные.
Или, возможно, человек создал таблицы Excel, но с другими именами.
В таких случаях вы все равно можете использовать Power Query, но вам нужно сделать это с помощью пары дополнительных шагов.
- Перейдите на вкладку «Данные».
- В группе «Получить и преобразовать» щелкните раскрывающееся меню «Новый запрос».
- Наведите курсор на «Из файла» и нажмите «Из папки».
- В диалоговом окне «Папка» введите путь к папке, в которой находятся файлы, или нажмите «Обзор» и найдите папку.
- Щелкните ОК.
- В открывшемся диалоговом окне нажмите кнопку «Редактировать». Откроется редактор Power Query, в котором вы увидите подробную информацию обо всех файлах в папке.
- Удерживая клавишу Control, выберите столбцы «Содержание» и «Имя», щелкните правой кнопкой мыши и выберите «Удалить другие столбцы». Это удалит все остальные столбцы, кроме выбранных.
- На ленте редактора запросов нажмите «Добавить столбец», а затем нажмите «Пользовательский столбец».
- В диалоговом окне «Добавить настраиваемый столбец» назовите новый столбец «Импорт данных» и используйте следующую формулу. = Excel.Workbook ([КОНТЕНТ]). Обратите внимание, что в этой формуле учитывается регистр, и вам нужно ввести ее точно так, как я показал здесь.
- Теперь вы увидите новый столбец, в котором записана таблица. Теперь позвольте мне объяснить, что здесь произошло. Вы предоставили Power Query имена книг, а Power Query извлек такие объекты, как рабочие листы, таблицы и именованные диапазоны из каждой книги (которая на данный момент находится в ячейке таблицы). Вы можете щелкнуть пустое пространство рядом с текстовой таблицей, и вы увидите информацию внизу. В этом случае, поскольку у нас есть только одна таблица и один рабочий лист в каждой книге, вы можете увидеть только две строки.
- Щелкните значок с двойной стрелкой вверху столбца «Импорт данных».
- В открывшемся окне данных столбца снимите флажок «Использовать исходный столбец в качестве префикса» и нажмите кнопку «ОК».
- Теперь вы увидите развернутую таблицу, в которой вы видите по одной строке для каждого объекта в таблице. В этом случае для каждой книги объект листа и объект таблицы указываются отдельно.
- В столбце «Вид» отфильтруйте список, чтобы отображалась только таблица.
- Удерживая клавишу Control, выберите столбец «Имя и данные». Теперь щелкните правой кнопкой мыши и удалите все остальные столбцы.
- В столбце «Данные» щелкните значок с двойной стрелкой в правом верхнем углу заголовка данных.
- В открывшемся поле данных столбца нажмите ОК. Это объединит данные во всех таблицах и отобразит их в Power Query.
- Теперь вы можете выполнить любое необходимое преобразование, а затем перейти на вкладку «Главная» и нажать «Закрыть и загрузить».
Теперь позвольте мне попытаться быстро объяснить, что мы здесь сделали. Поскольку имена листов или таблиц не были согласованными, мы использовали формулу = Excel.Workbook для получения всех объектов книг в Power Query. Эти объекты могут включать листы, таблицы и именованные диапазоны. Когда у нас были все объекты из всех файлов, мы отфильтровали их, чтобы рассматривать только таблицы Excel. Затем мы расширили данные в таблицах и объединили все это.
В этом примере мы отфильтровали данные, чтобы использовать только таблицы Excel (на шаге 13). Если вы хотите объединить листы, а не таблицы, вы можете фильтровать листы.
Примечание. Этот метод даст вам объединенные данные, даже если есть несоответствие в именах столбцов. Например, если в East.xlsx у вас есть столбец с ошибкой, вы получите 5 столбцов. Power Query заполнит данные в столбцах, если найдет их, а если не сможет найти столбец, сообщит значение как «null».
Точно так же, если у вас есть дополнительные столбцы на любом из листов таблиц, они будут включены в окончательный результат.
Теперь, если у вас есть больше книг, из которых вам нужно объединить данные, просто скопируйте и вставьте их в папку и обновите Power Query.
По своим наблюдениям, я замечал, что многие мои коллеги — при объединении 2-х и более таблиц в Excel используют методы ручного копирования данных, при соединении таблиц по одинаковым столбцам данных используют функцию ВПР. Это, конечно удобно, когда речь идет о небольших объемах данных. Но, что делать, если Вам необходимо обработать большие массивы данных из разных источников и из большого количества таблиц? В данном случае, Вам подойдет инструмент Power Query.
Как быстро можно объединить 2 и более таблицы в одну путем добавления данных:
1.В программе Excel импортируем данные из 2-х или более источников, например из книги *xlsx.
2. Создаем подключения данных.
3. Объединяем запросы через вкладку: Данные – создать запрос – объединить запросы – Добавить.
Таким образом данные из нескольких таблиц соединяются в одну таблицу буквально за несколько кликов мыши.
С использованием Power Query также можно объединять таблицы в одну через одинаковые столбцы данных, используя путь: Данные – создать запрос – объединить запросы – Объединить. Это аналог инструмента ВПР, но наиболее быстрый, удобный и эффективный.