目次
はじめに
複数のテーブルを結合して一覧表を作成する際、Power Query の Table.Join
関数を使用すると、SQL に似た感覚で 内部結合・外部結合 などを簡単に実行できます。本記事では、ブック内テーブル tbl_Instructor
と tbl_CourseMap
を結合し、結果から必要列のみを抽出する手順を解説いたします。あわせて JoinKind
パラメーターで選択可能な結合種別も整理いたします。
1. サンプル M コード
以下のコードを Power Query エディターの 「詳細エディター」 に貼り付けてご活用ください。
let
// 現在のブック内に存在するすべてのテーブルを取得
WorkbookTables = Excel.CurrentWorkbook(),
// テーブル(tbl_Instructor, tbl_CourseMap) を id 列で内部結合
JoinedTable = Table.Join(
WorkbookTables{[Name = "tbl_Instructor"]}[Content], "InstructorID",
WorkbookTables{[Name = "tbl_CourseMap"]}[Content], "InstructorID",
JoinKind.Inner // 必要に応じて JoinKind を変更
),
// 必要な列だけを選択
OutputTable = Table.SelectColumns(
JoinedTable,
{"CourseID", "CourseName", "InstructorName", "Classroom", "Timeslot"}
)
in
OutputTable
コードのポイント
ステップ | 説明 |
---|---|
Excel.CurrentWorkbook() | ブック内のテーブル・名前付き範囲をリスト形式で取得します。 |
Table.Join | 第 1・第 2 引数に結合元テーブルとキー列、第 3・第 4 引数に結合先テーブルとキー列を渡します。第 5 引数で結合種別(JoinKind )を指定します。 |
Table.SelectColumns | 不要列を除外し、列順も同時に整えます。 |
2. JoinKind
で選択可能な結合種別
パラメーター | 結合イメージ | 説明(左テーブル:A、右テーブル:B) |
---|---|---|
JoinKind.Inner | A ∩ B | 左右両方に存在するキーのみを取得します。 |
JoinKind.LeftOuter | A + (A∩B) | 左テーブルの全行+一致した右テーブル行を取得します。 |
JoinKind.RightOuter | B + (A∩B) | 右テーブルの全行+一致した左テーブル行を取得します。 |
JoinKind.FullOuter | A ∪ B | 左右両方の全行を取得します(不一致キーは null で補完)。 |
JoinKind.LeftAnti | A − (A∩B) | 左テーブルのみで、右テーブルに一致しない行を取得します。 |
JoinKind.RightAnti | B − (A∩B) | 右テーブルのみで、左テーブルに一致しない行を取得します。 |
補足
結合キーが複数列の場合は、{"Key1","Key2"}
のようなリストをキー列引数に指定できます。
3. 操作手順
- Power Query エディターを起動
- Excel メニュー 「データ」タブ → 「テーブル/範囲から」 をクリックし、任意のテーブルを選択して 「データの変換」 を押します。
- 詳細エディターでコードを貼り付け
- エディター上部 「ホーム」→「詳細エディター」 を開き、前述の M コードをすべて貼り付けます。
- プレビュー確認と読み込み
- 結合結果が意図どおりか確認し、「閉じて読み込む」 を押します。
- シート上に新しいテーブルとして配置、または接続のみ保存が可能です。
4. 応用アイデア
ニーズ | 実装例 |
---|---|
結合後にデータ型を統一 | Table.TransformColumnTypes を追加し、列ごとに型を設定します。 |
重複行の削除 | 最後に Table.Distinct を追加し、一意行のみに整理します。 |
複数テーブルを順次結合 | List.Accumulate を利用し、動的リストでテーブルをループ結合できます。 |
まとめ
マクロやスクリプトを使わず、クエリの更新ボタンひとつで最新状態を反映できる点が大きなメリットです。
Table.Join
と JoinKind
パラメーターを活用することで、Power Query 内で SQL ライクな結合処理が簡単に実行できます。
列抽出や型変換ステップを組み合わせると、下流工程でのデータ整備作業を削減できます。