Объединение нескольких excel файлов в один power query

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

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

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

Файлы для сборки

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

Данные в книгах

Количество строк (заказов) в таблицах, само-собой, разное, но набор столбцов везде стандартный.

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

Подбираем оружие

Для решения нам потребуется последняя версия Excel 2016 (в нее нужный функционал уже встроен по умолчанию) или предыдущие версии Excel 2010-2013 с установленной бесплатной надстройкой Power Query от Microsoft (скачать ее можно здесь). Power Query — это супергибкий и супермощный инструмент для загрузки в Excel данных из внешнего мира с последующей их зачисткой и обработкой. Power Query поддерживает практически все существующие источники данных — от текстовых файлов до SQL и даже Facebook :)

Если у вас нет Excel 2013 или 2016, то дальше можно не читать (шучу). В более древних версиях Excel подобную задачу можно реализовать только программированием макроса на Visual Basic (что весьма непросто для начинающих) или монотонным ручным копированием (что долго и порождает ошибки).

Шаг 1. Импортируем один файл как образец

Для начала давайте импортируем данные из одной книги в качестве примера, чтобы Excel «подхватил идею». Для этого создайте новую пустую книгу и…

  • если у вас Excel 2016, то откройте вкладку Данные и выберите Создать запрос — Из файла — Из книги (Data — New Query- From file — From Excel)
  • если у вас Excel 2010-2013 с установленной надстройкой Power Query, то откройте вкладку Power Query и выберите на ней Из файла — Из книги (From file — From Excel)

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

Навигатор Power Query

Если нажать в правом нижнем углу этого окна кнопку Загрузить (Load), то таблица будет сразу импортирована на лист в исходном виде. Для одиночного файла — это хорошо, но нам нужно загрузить много таких файлов, поэтому мы пойдем немного другим путем и жмем кнопку Правка (Edit). После этого должен в отдельном окне отобразиться редактор запросов Power Query с нашими данными из книги:

Редактор запросов Power Query

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

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

Для примера, давайте добавим к нашей таблице столбец с текстовым названием месяца, чтобы потом проще было строить отчеты сводных таблиц. Для этого щелкните правой кнопкой мыши по заголовку столбца Дата и выберите команду Дублировать столбец (Duplicate Column), а затем щелкните правой кнопкой мыши по заголовку появившегося столбца-дубликата и выберите команды Преобразование — Месяц — Название месяца:

Добавление столбца с месяцем

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

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

Преобразование форматов данных в столбцах

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

Фильтрация данных в Power Query

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

Шаги преобразований

Легко и изящно, не правда ли?

Шаг 2. Преобразуем наш запрос в функцию

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

В редакторе запросов перейдите на вкладку Просмотр и нажмите кнопку Расширенный редактор (View — Advanced Editor). Должно открыться окно, где все наши предыдущие действия будут записаны в виде кода на языке М. Обратите внимание, что в коде жестко прописан путь к файлу, который мы импортировали для примера:

Исходный код

Теперь аккуратно вносим пару правок:

Измененный код

Смысл их прост: первая строка (filepath)=> превращает нашу процедуру в функцию с аргументом filepath, а ниже мы меняем фиксированный путь на значение этой переменной. 

Все. Жмем на Готово и должны увидеть вот это:

Созданная функция

Не пугайтесь, что пропали данные — на самом деле все ОК, все так и должно выглядеть :) Мы успешно создали нашу пользовательскую функцию, где запомнился весь алгоритм импорта и обработки данных без привязки к конкретному файлу. Осталось дать ей более понятное имя (например getData) на панели справа в поле Имя и можно жать Главная — Закрыть и загрузить (Home — Close and Load). Обратите внимание, что в коде жестко прописан путь к файлу, который мы импортировали для примера.. Вы вернетесь в основное окно Microsoft Excel, но справа должна появиться панель с созданным подключением к нашей функции:

Подключение к функции

Шаг 3. Собираем все файлы

Все самое сложное — позади, осталась приятная и легкая часть. Идем на вкладку Данные — Создать запрос — Из файла — Из папки (Data — New Query — From file — From folder) или, если у вас Excel 2010-2013, аналогично на вкладку Power Query. В появившемся окне указываем папку, где лежат все наши исходные файлы-города и жмем ОК. Следующим шагом должно открыться окно, где будут перечислены все найденные в этой папке (и ее подпапках) файлы Excel и детализация по каждому из них:

Импорт всех файлов Excel из заданной папки

Жмем Изменить (Edit) и опять попадаем в знакомое окно редактора запросов.

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

Дополнительный столбец

После нажатия на ОК созданный столбец должен добавиться к нашей таблице справа.

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

А теперь «вау-момент» — щелкнем мышью по значку со своенным стрелками в правом верхнем углу добавленного столбца с нашей функцией:

Подгружаем данные в пользовательский столбец

… снимаем флажок Использовать исходное имя столбца как префикс (Use original column name as prefix)и жмем ОК. И наша функция подгрузит и обработает данные из каждого файла, следуя записанному алгоритму и собрав все в общую таблицу:

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

Для полной красоты можно еще убрать расширения .xlsx из первого столбца с именами файлов — стандартной заменой на «ничего» (правой кнопкой мыши по заголовку столбца — Заменить) и переименовать этот столбец в Город. А также подправить формат данных в столбце с датой.

Все! Жмем на Главной — Закрыть и загрузить (Home — Close & Load). Все собранные запросом данные по всем городам будут выгружены на текущий лист Excel в формате «умной таблицы»:

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

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

В будущем, при любых изменениях в папке (добавлении-удалении городов) или в файлах (изменение количества строк) достаточно будет щелкнуть правой кнопкой мыши прямо по таблице или по запросу в правой панели и выбрать команду Обновить (Refresh) — Power Query «пересоберет» все данные заново за несколько секунд.

P.S.

Поправка. После январских обновлений 2017 года Power Query научился собирать Excel’евские книги сам, т.е. не нужно больше делать отдельную функцию — это происходит автоматически. Таким образом второй шаг из этой статьи уже не нужен и весь процесс становится заметно проще:

  1. Выбрать Создать запрос — Из файла — Из папки — Выбрать папку — ОК
  2. После появления списка файлов нажать Изменить
  3. В окне редактора запросов развернуть двойной стрелкой столбец Binary и выбрать имя листа, который нужно взять из каждого файла

И все! Песня!

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

  • Редизайн кросс-таблицы в плоскую, подходящую для построения сводных таблиц
  • Построение анимированной пузырьковой диаграммы в Power View
  • Макрос для сборки листов из разных файлов Excel в один

По своим наблюдениям, я замечал, что многие мои коллеги — при объединении 2-х и более таблиц в Excel используют методы ручного копирования данных, при соединении таблиц по одинаковым столбцам данных используют функцию ВПР. Это, конечно удобно, когда речь идет о небольших объемах данных. Но, что делать, если Вам необходимо обработать большие массивы данных из разных источников и из большого количества таблиц? В данном случае, Вам подойдет инструмент Power Query.

Как быстро можно объединить 2 и более таблицы в одну путем добавления данных:

1.В программе Excel импортируем данные из 2-х или более источников, например из книги *xlsx.

2. Создаем подключения данных.

3. Объединяем запросы через вкладку: Данные – создать запрос – объединить запросы – Добавить.

Таким образом данные из нескольких таблиц соединяются в одну таблицу буквально за несколько кликов мыши.

С использованием Power Query также можно объединять таблицы в одну через одинаковые столбцы данных, используя путь: Данные – создать запрос – объединить запросы – Объединить. Это аналог инструмента ВПР, но наиболее быстрый, удобный и эффективный.

Файлы к уроку:

  • Для спонсоров Boosty
  • Для спонсоров VK

Ссылки:

  • Страница курса
  • Плейлист YouTube
  • Плейлист ВК

Описание

В этом уроке вы узнаете как объединить все таблицы, которые находятся в разных книгах Excel из одной директории. Например, данные по продажам каждого месяца находятся в отдельном файле. Всего таких файлов довольно много. Вам нужно предварительно каждый файл обработать, а потом все файлы объединить. Делать это вручную очень долго, мучительно и может повлечь за собой много ошибок. В Power Query решить такую задачу проще простого. Смотрите видео и повторяйте за мной.

В этом видео вы узнаете:

  • Как объединить все таблицы в одной папке с Power Query
  • Как сделать консолидацию всех файлов в папке в Excel
  • Как объединить по вертикали все файлы в одной папке

Решение

Разберем 2 примера. Первым пример будет простым. Мы объединим файлы без предварительной обработки.

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

Объединить файлы из одной папки без предварительной обработки

Если предварительная обработка не требуется, то задача решается в 2 логических этапа:

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

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

Сначала нужно подключиться к папке с файлами и развернуть столбец Content, нажав на кнопку:

После нажатия на кнопку Power Query автоматически создаст запросы, функции и параметры:

Все, что вы проделаете с запросом «Пример файла» автоматически применится к каждому файлу в папке.

То, что находится в данном примере находится в запросе sales — это итоговая результирующая таблица.

Примененные функции

  • Folder.Files
  • Table.SelectColumns
  • Table.AddColumn
  • Csv.Document
  • Table.ExpandTableColumn
  • Table.PromoteHeaders
  • Table.RemoveRowsWithErrors
  • Table.TransformColumnTypes
  • Int64.Type
  • Table.Skip
  • Table.SelectRows
  • Table.RenameColumns
  • Table.ColumnNames
  • Excel.CurrentWorkbook

Код

Без предварительной обработки
let
   // Подключаемся к папке и выбираем файлы для объединения
   source = Folder.Files(path & "Котировки csv"),
   cols_select_1 = Table.SelectColumns(source, {"Content", "Name"}),
   col_add = Table.AddColumn(cols_select_1, "Таблица", each Csv.Document([Content])),
   cols_select_2 = Table.SelectColumns(col_add, {"Таблица"}),

   // Развернуть табличный столбец и почистить данные
   col_expand = Table.ExpandTableColumn(
      cols_select_2,
      "Таблица",
      {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"},
      {
         "Таблица.Column1",
         "Таблица.Column2",
         "Таблица.Column3",
         "Таблица.Column4",
         "Таблица.Column5",
         "Таблица.Column6",
         "Таблица.Column7"
      }
   ),
   headers_promote = Table.PromoteHeaders(col_expand, [PromoteAllScalars = true]),
   rows_remove_errors = Table.RemoveRowsWithErrors(headers_promote, {"Date"}),
   types_1 = Table.TransformColumnTypes(
      rows_remove_errors,
      {{"Date", type date}, {"Volume", Int64.Type}}
   ),
   types_2 = Table.TransformColumnTypes(
      types_1,
      {
         {"Open", type number},
         {"High", type number},
         {"Low", type number},
         {"Close", type number},
         {"Adj Close", type number}
      },
      "en-US"
   )
in
   types_2
С предварительной обработкой

Код «Пример файла»:

let
   source      = Folder.Files(path_folder),
   rows_select = Table.SelectRows(source, each ([Extension] = ".txt")),
   get_file    = rows_select{0}[Content]
in
   get_file

Код «Параметр файла примера1»:

#"Пример файла"
   meta [
      IsParameterQuery         = true,
      BinaryIdentifier         = #"Пример файла",
      Type                     = "Binary",
      IsParameterQueryRequired = true
   ]

Код «Преобразовать пример файла из Продажи»:

let
   source = Csv.Document(
      #"Параметр файла примера1",
      [Delimiter = "	", Columns = 26, Encoding = 65001, QuoteStyle = QuoteStyle.None]
   ),
   rows_skip = Table.Skip(source, 4),
   headers = Table.PromoteHeaders(rows_skip, [PromoteAllScalars = true]),
   rows_select = Table.SelectRows(headers, each ([Дата] <> "Итого"))
in
   rows_select

Код «Преобразовать файл из Продажи»:

let
   fn_append = (#"Параметр файла примера1" as binary) =>
      let
         source = Csv.Document(
            #"Параметр файла примера1",
            [
               Delimiter  = "	",
               Columns    = 26,
               Encoding   = 65001,
               QuoteStyle = QuoteStyle.None
            ]
         ),
         rows_skip = Table.Skip(source, 4),
         headers = Table.PromoteHeaders(rows_skip, [PromoteAllScalars = true]),
         rows_select = Table.SelectRows(headers, each ([Дата] <> "Итого"))
      in
         rows_select
in
   fn_append

Код результирующей таблицы:

let
   source = Folder.Files(path_folder & "Продажи"),
   fn_append = Table.AddColumn(
      source,
      "Преобразовать файл из Продажи",
      each #"Преобразовать файл из Продажи"([Content])
   ),
   cols_rename = Table.RenameColumns(
      fn_append,
      {"Name", "Source.Name"}
   ),
   cols_select = Table.SelectColumns(
      cols_rename,
      {"Source.Name", "Преобразовать файл из Продажи"}
   ),
   col_expand = Table.ExpandTableColumn(
      cols_select,
      "Преобразовать файл из Продажи",
      Table.ColumnNames(#"Преобразовать файл из Продажи"(#"Пример файла"))
   )
in
   col_expand

Этот урок входит в Базовый курс 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 Будем искать ключевые поля в текстовом поле и присваивать этому значению какую-то категорию.

Power Query умеет подключаться к разным источникам. Далее рассмотрим, как получить данные из книги Excel.

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

Чтобы загрузить таблицу в редактор Power Query, достаточно выделить любую ее ячейку и нажать Данные → Получить и преобразовать данные → Из таблицы/диапазона.

Импорт данных в Power Query из таблицы Excel

Примечание. В вашей версии Excel расположение кнопок и их названия могут отличаться.

Если то же самое проделать с обычным диапазоном, то Excel вначале преобразует диапазон в таблицу Excel, а потом запустит Power Query.

Окно редактора Power Query

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

Данные находятся в Power Query. Новые значения, внесенные в исходную таблицу, автоматически попадут в запрос после его обновления. Далее в редакторе Power Query делают обработку данных и выгружают либо в виде таблицы Excel, либо оставляют в памяти Excel в виде подключения.

Выгрузка данных из Power Query

Именованный диапазон Excel

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

Создание именованного диапазона через поле Имя

Либо выполнить команду Формулы → Определенные имена → Присвоить имя. В Excel будет создан новый объект, к которому можно обращаться, например, в формулах. Диапазон виден в Диспетчере имен.

Диспетчер имен

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

Теперь можно стать на любую ячейку внутри именованного диапазона (или выбрать его из выпадающего списка в поле Имя) и вызвать ту же команду: Данные → Получить и преобразовать данные → Из таблицы/диапазона. Произойдет загрузка данных в Power Query.

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 обратится к текущей книге и выведет все объекты, среди которых есть и наш динамический диапазон ДинамОтчет.

Все объекты с данными книги Excel в виде списка

Название запроса не подхватывается, поэтому придется изменить самостоятельно.

Чтобы извлечь содержимое объекта, в этой же строке правой кнопкой мыши кликаем по Table, далее выбираем Детализация.

Детализация

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

Загрузка динамического диапазона

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

Вот такие приемы импорта данных в Power Query из книги Excel. Самый распространенный из них – это импорт из таблицы Excel. Тем не менее, в случае необходимости можно прибегнуть к альтернативам, создав именованный или динамический именованный диапазон.

Консолидация данных из разных таблиц Excel

Одна из насущных задач, с которыми сталкиваются пользователи, – консолидация данных. Под консолидацией понимается объединение нескольких таблиц в одну. До появления Power Query это была довольно трудоемкая операция, особенно, если процесс требовал автоматизации. Хотя в эксель есть специальная команда Данные → Работа с данными → Консолидация, пользоваться ей не удобно. Мне, по крайней мере. Появление Power Query в корне изменило представление о том, как нужно объединять таблицы.

Рассмотрим пример. В некоторый файл каждый месяц вносится отчет о продажах в формате таблицы Excel. Каждая таблица при этом имеет соответствующее название: Январь_2018, Февраль_2018 и т.д. Необходимо объединить все таблицы книги в одну. Как бы скопировать и вставить одну под другой, создав при этом дополнительный столбец, указывающий, к какой таблице принадлежит конкретная строка. Задача не одноразовая, а с заделом на будущее, поэтому нужно предусмотреть появление в этом файле новых таблиц.

Процесс начинается с запуска пустого запроса: Данные → Получить и преобразовать данные → Создать запрос → Из других источников → Пустой запрос

Затем в строке формул вводим знакомую команду

= Excel.CurrentWorkbook()

Power Query показывает все таблицы в текущей книге.

Все таблицы в книге Excel

Их нужно развернуть кнопкой с двумя стрелками в названии поля Content (на скриншоте ниже выделено красным кружком).

Кнопка для разворачивания таблиц

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

Все таблицы в Power Query

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

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

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

Удалим нижнее подчеркивание. Правой кнопкой мыши по названию столбца Name → Замена значений.

Замена

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

Заполнение окна для замены

Подчеркивание удаляется из названия.

Удаленное подчеркивание

Поиск и замена здесь работает так же, как и в обычном Excel.

Далее запускаем команду Преобразование → Столбец «Дата и время» → Дата → Выполнить анализ.

Анализ текста для преобразования в дату

Power Query распознает дату и меняет формат колонки. Мы также переименовываем столбец на Период.

Поле с датой

Полученную таблицу можно использовать для анализа данных. Выгрузим ее на лист Excel.
Главная → Закрыть и загрузить.

Выгруженная таблица с ошибками

Но что-то пошло не так. Во-первых, внизу таблицы пустая строка; во-вторых, при выгрузке произошла одна ошибка. Обновим запрос (справа от названия запроса значок обновления).

После обновления запроса ошибок еще больше

Что-то еще больше пошло не так. Даты исчезли, снизу таблицы добавились новые строки, а количество ошибок уже 19. Спокойствие, только спокойствие! Дело вот в чем.

Помните, на первом шаге мы получили все таблицы из файла? Так ведь и выгруженная таблица – это тоже таблица! Получается, Power Query взял 3 исходных таблицы, обработал, выгрузил на лист Excel и на следующем круге видит уже 4 таблицы!

Таблица выхода в общем запросе

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

Короче, из запроса нужно исключить таблицу, которая получается на выходе (Запрос1). Есть разные подходы, самый простой – это добавить шаг фильтрации. Выделяем в правой панели первый шаг Источник, открываем фильтр в колонке с названиями, снимаем галку с таблицы Запрос1 → Ok.

Выгруженная таблица без ошибок

Снова выгружаем таблицу в Excel и на этот раз все в порядке.

Выгруженная таблица с запросом без ошибок

Сделаем с помощью сводной таблицы маленький отчет по месяцам.

Сводная таблица по результатам запроса Power Query

Прошло время, и в файл добавили новую таблицу с продажами за апрель.

Продажи за следующий месяц

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

А вот, как это выглядит при использовании Power Query.

Обновление отчета из Power Query

Достаточно два раза нажать кнопку Обновить все (первый раз – для обновления запроса, второй – для сводной таблицы).

Обновленный отчет на основе запроса Power Query

На добавление в отчет новых данных вместе с их обработкой потребовалось несколько секунд.

Вот за это мы так любим Power Query.

↓ Скачать файл с примером ↓

Поделиться в социальных сетях:

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

Для объединения подходят многие файлы с данными. Обычно это результаты выгрузки из автоматизированных систем.

Файлы могут быть в формате txt, csv, xml, xlsx. C текстовыми файлами txt, csv никаких проблем нет, данные просто будут в одной общей таблице.

C xml-файлами немного сложнее, так как их структура может быть непредсказуема (многоуровневая табличная архитектура), но, в основном, надстройка POWERQUERY легко справляется и с ними.

Кроме того, мы можем ещё до объединения файлов, сделать обработку.

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

Как все это работает?

Допустим у нас есть папка с файлами, которые необходимо объединить в один. Первым делом, мы открываем пустой файл xlsx.

В верхнем меню выбираем «Данные», затем «Создать запрос» и указываем нашу папку с файлами.

Нажимаем объединить и изменить

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

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

Ещё одна, очень важная, возможность PowerQuery — объединение нескольких запросов.

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

Понравилась статья? Поделить с друзьями:
  • Объединение листов excel в один макросом
  • Объединение книг с листами в excel
  • Объединение книг excel в одну книгу файлов
  • Объединение источников данных excel
  • Объеденить ячейки в excel