LoginSignup
0
1

More than 1 year has passed since last update.

Power Query で列名を指定せずにテーブルを結合する方法

Posted at

はじめに

Excelブックで、下記のように複数のテーブルが同じ列名を持っているようなときに、これらを一つのテーブルに結合させる方法を考えます。
image.png

Power Query エディタでクエリを作成する場合

「データの取得」を使って対象のExcelファイルを開き、ナビゲーターではシートを選ばずにブックを選択した状態で「データの変換」を選択します。
image.png

ブックの中から目的のTableのみでフィルターした後、Data列の展開を実施します。
image.png

このようにすると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"

image.png

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"

image.png

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"

image.png

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1