Это можно сделать с помощью Power Query. Следующие запросы предполагают, что вы создали таблицы с вашими данными с именами «Таблица1» на Листе 1 и «Таблица2» на Листе 2. Для этого потребуется 5 отдельных запросов: 2 для таблиц данных, одна функция, таблица слияния и один последний запрос для объединения данных. Для всего этого добавьте новый пустой запрос (вкладка «Данные»> «Получить данные»> «Из других источников»> «Пустой запрос»). Вам также необходимо создать именованный диапазон для ячейки D1 на листе 1 под названием «YearValue».
Функция YearValue
Вставьте приведенный ниже код в расширенный редактор (Power Query). > Вид> Расширенный редактор). Измените имя (справа) на «YearValue».
let
Source = Excel.CurrentWorkbook(){[Name="YearValue"]}[Content]{0}[Column1]
in
Source
Закрыть и загрузить только для подключения.
Запрос таблицы 1
Вставьте приведенный ниже код в расширенный редактор (Power Query> View> Advanced Editor). Измените имя (справа) на «Table1».
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
TypeColumns = Table.TransformColumnTypes(Source,{{"AccountID", Int64.Type}, {"Cost", Int64.Type}}),
AddYearColumn = Table.AddColumn(TypeColumns, "Year", each YearValue)
in
AddYearColumn
Закрыть и загрузить только для подключения.
Запрос таблицы 2
Вставьте приведенный ниже код в расширенный редактор (Power Query> View> Advanced Editor). Измените имя (справа) на «Table2».
let
Source = Excel.CurrentWorkbook(){[Name="Table2"]}[Content],
TypeColumns = Table.TransformColumnTypes(Source,{{"Year", Int64.Type}, {"AccountID", Int64.Type}, {"Location", type text}, {"Phone#", type text}, {"Email type", type text}, {"Cost", Int64.Type}})
in
TypeColumns
Закрыть и загрузить только для подключения.
Запрос таблицы слияния
Вставьте приведенный ниже код в расширенный редактор (Power Query> View> Advanced Editor). Измените имя (справа) на «MergeTable».
let
Source = Table.FromColumns({List.Distinct(List.Select(Table1[AccountID]&Table2[AccountID],each _ <> null))},type table[AccountID = text]),
MergeQueries = Table.NestedJoin(Source,{"AccountID"},Table1,{"AccountID"},"Table1",JoinKind.LeftOuter),
ExpandedTable1 = Table.ExpandTableColumn(MergeQueries, "Table1", {"AccountID", "Cost", "Year"}, {"Table1.AccountID", "Table1.Cost", "Table1.Year"}),
MergeQueries2 = Table.NestedJoin(ExpandedTable1,{"AccountID"},Table2,{"AccountID"},"Table2",JoinKind.LeftOuter),
ExpandedTable2 = Table.ExpandTableColumn(MergeQueries2, "Table2", {"Year", "AccountID", "Location", "Phone#", "Email type", "Cost"}, {"Table2.Year", "Table2.AccountID", "Table2.Location", "Table2.Phone#", "Table2.Email type", "Table2.Cost"}),
RemoveColumns = Table.RemoveColumns(ExpandedTable2,{"AccountID", "Table2.Year", "Table2.AccountID", "Table2.Cost"}),
ReorderColumns = Table.ReorderColumns(RemoveColumns,{"Table1.Year", "Table1.AccountID", "Table2.Location", "Table2.Phone#", "Table2.Email type", "Table1.Cost"}),
RenameColumns = Table.RenameColumns(ReorderColumns,{{"Table1.Year", "Year"}, {"Table1.AccountID", "AccountID"}, {"Table2.Location", "Location"}, {"Table2.Phone#", "Phone#"}, {"Table2.Email type", "Email type"}, {"Table1.Cost", "Cost"}})
in
RenameColumns
Закрыть и загрузить только для подключения.
Запрос объединить таблицы
Вставьте приведенный ниже код в расширенный редактор (Power Query> View> Advanced Editor). Измените имя (справа) на «CombineTables».
let
Source = Table.Combine({Table2, MergeTable}),
FilterRows = Table.SelectRows(Source, each ([Year] <> null)),
SortRows = Table.Sort(FilterRows,{{"AccountID", Order.Ascending}})
in
SortRows
Закройте и загрузите рабочий лист (по желанию).
HTH