はじめに
Excelブックで、下記のように複数のテーブルが同じ列名を持っているようなときに、これらを一つのテーブルに結合させる方法を考えます。
Power Query エディタでクエリを作成する場合
「データの取得」を使って対象のExcelファイルを開き、ナビゲーターではシートを選ばずにブックを選択した状態で「データの変換」を選択します。
ブックの中から目的のTableのみでフィルターした後、Data列の展開を実施します。
このようにするとTable.ExpandTableColumn
によってData列にあるテーブルからデータを展開・結合させることができますが、引数に列名が埋め込まれてしまうため、入力テーブルの列名が変更されてしまうとクエリを修正する必要があります。
let
ソース = Excel.Workbook(File.Contents("D:\都道府県.xlsx"), null, true),
フィルターされた行 = Table.SelectRows(ソース, each ([Kind] = "Table")),
#"展開された Data" = Table.ExpandTableColumn(フィルターされた行, "Data", {"地方", "ISO JIS番号", "都道府県", "読み", "都道府県庁所在地", "最大都市", "旗", "地方.1", "人口 (人)", "面積 (km2)", "人口密度 (人/km2)", "市町村数", "国会定数 衆 / 参"}, {"地方", "ISO JIS番号", "都道府県", "読み", "都道府県庁所在地", "最大都市", "旗", "地方.1", "人口 (人)", "面積 (km2)", "人口密度 (人/km2)", "市町村数", "国会定数 衆 / 参"})
in
#"展開された Data"
Table.Combine
で結合する方法
元のName列などを残す必要が無いのであれば、Table.Combine
を使って結合するのが一番単純な方法です。
let
ソース = Excel.Workbook(File.Contents("D:\都道府県.xlsx"), null, true),
フィルターされた行 = Table.SelectRows(ソース, each ([Kind] = "Table")),
#"展開された Data" = Table.Combine(フィルターされた行[Data])
in
#"展開された Data"
Table.ColumnNames
で列名を指定する方法
Table.ExpandTableColumn
と同じ結果を得たい場合は、下記のように一度Table.Combine
で結合した後にTable.ColumnNames
で列名のリストを取得する方法を利用できます。
let
ソース = Excel.Workbook(File.Contents("D:\都道府県.xlsx"), null, true),
フィルターされた行 = Table.SelectRows(ソース, each ([Kind] = "Table")),
#"展開された Data" = Table.ExpandTableColumn(フィルターされた行, "Data", Table.ColumnNames(Table.Combine(フィルターされた行[Data])))
in
#"展開された Data"