テーブルの結合 ― マージと追加
このページのゴール
Power Queryでテーブルを結合する2つの方法 ―「マージ(横方向に列を増やす=VLOOKUP的)」と「追加(縦方向に行を増やす=UNION的)」― の違いを理解し、6種類の結合型を場面に応じて使い分けられるようになることです。
VBAが使えない、マクロ禁止の職場では、VLOOKUP的な結合処理や月次データの統合をPower Queryで代替できる場面が多くあります。
「マージ」と「追加」の違い
| マージ(Merge) | 追加(Append) | |
|---|---|---|
| 方向 | 横方向 ― 列が増える | 縦方向 ― 行が増える |
| イメージ | VLOOKUP / XLOOKUP で別テーブルの列を引っ張ってくる | 2つの表を上下に貼り合わせる(Excelの「コピー&末尾に貼り付け」) |
| 前提条件 | 両テーブルに共通のキー列(商品コード、社員番号など)が必要 | 両テーブルの列構成が同じ(または似ている)こと |
| SQL相当 | JOIN | UNION ALL |
マージ(横結合)の基本操作
サンプルデータ
売上テーブル
| 注文ID | 商品コード | 数量 |
|---|---|---|
| 1001 | A01 | 3 |
| 1002 | B02 | 1 |
| 1003 | A01 | 5 |
| 1004 | C03 | 2 |
商品マスタ
| 商品コード | 商品名 | 単価 |
|---|---|---|
| A01 | ノートPC | 80000 |
| B02 | マウス | 3000 |
| D04 | キーボード | 5000 |
売上テーブルに商品名と単価を付加したい ― Excelなら VLOOKUP を使う場面です。
操作手順
1. 売上テーブルのクエリをエディターで開きます。
2. ホーム タブ → クエリのマージ をクリックします。
3. ダイアログ上部に現在のテーブル(売上テーブル)が表示されます。下部のドロップダウンから商品マスタを選択します。
4. 上のテーブルで「商品コード」列をクリック、下のテーブルでも「商品コード」列をクリックして、キー列を対応付けます。
5. 「結合の種類」は「左外部(最初のテーブルのすべての行と、2番目のテーブルの一致する行)」のままで「OK」。
6. 右端に「商品マスタ」というテーブル型の列が追加されます。
7. その列のヘッダーにある展開ボタン(⇔アイコン)をクリックします。
8. 展開したい列(商品名、単価)にチェックを入れ、「元の列名をプレフィックスとして使用します」のチェックは外して「OK」。
9. 商品名と単価の列が追加されます。
結果
| 注文ID | 商品コード | 数量 | 商品名 | 単価 |
|---|---|---|---|---|
| 1001 | A01 | 3 | ノートPC | 80000 |
| 1002 | B02 | 1 | マウス | 3000 |
| 1003 | A01 | 5 | ノートPC | 80000 |
| 1004 | C03 | 2 | null | null |
注文ID 1004の商品コード「C03」は商品マスタに存在しないため、商品名と単価が null になっています。これは「左外部結合」の動作で、VLOOKUPでいう #N/A に相当します。
6種類の結合型を理解する
マージのダイアログで選べる「結合の種類」は6つあります。実務で最も使うのは「左外部」ですが、他の型も知っておくと便利です。
| 結合の種類 | 動作 | VLOOKUPとの対応 | 使いどころ |
|---|---|---|---|
| 左外部 (Left Outer) |
左テーブル(現在のクエリ)の全行を残し、右テーブルは一致する行だけ付加。一致しなければ null。 | VLOOKUP と同じ(#N/A → null) | 最も頻繁に使う。売上データにマスタ情報を付加する場面。 |
| 右外部 (Right Outer) |
右テーブルの全行を残し、左テーブルは一致する行だけ。 | 左外部の逆 | マスタ側を基準にし、注文がない商品も一覧に含めたいとき。 |
| 完全外部 (Full Outer) |
両テーブルの全行を残す。一致しない行は null で補完。 | ― | 2つのリストの「突合せ」。どちらにしかないデータも含めて見たいとき。 |
| 内部 (Inner) |
両テーブルで一致する行だけ残す。一致しない行は消える。 | VLOOKUPで #N/A の行を除外した状態 | マスタに存在するデータだけに絞りたいとき。 |
| 左反 (Left Anti) |
左テーブルのうち、右テーブルに一致しない行だけ残す。 | VLOOKUP で #N/A になる行だけ抽出 | 「マスタに登録されていない商品コード」を探すとき。データ品質チェックに便利。 |
| 右反 (Right Anti) |
右テーブルのうち、左テーブルに一致しない行だけ残す。 | ― | 「使われていないマスタレコード」を探すとき。 |
マスタに登録されていないコード、前月と今月で差分があるレコードなど、「存在しないもの」を見つけるのが左反結合です。VLOOKUPで #N/A を探して手作業でフィルターしていた作業が、ワンクリックで済みます。
左テーブルのキー列がテキスト型、右テーブルのキー列が数値型の場合、Power Queryは「一致なし」と判定します。マージの前に、両方のキー列のデータ型が同じであることを確認してください。特に「001」(テキスト)と「1」(整数)は一致しません。
複数キーでのマージ
1つのキー列だけでは一意にならない場合(たとえば「部署コード+社員番号」で1人を特定する場合)、複数のキー列を指定できます。
操作手順
マージのダイアログで、上のテーブルの1つ目のキー列をクリックした後、Ctrlキーを押しながら2つ目のキー列をクリックします。下のテーブルでも同じ順序で2列をCtrl+クリックします。列名の横に「1」「2」の番号が表示され、対応関係がわかります。
「新しいクエリとしてマージ」
ホームタブの「クエリのマージ」ボタンのドロップダウンに「新しいクエリとしてクエリをマージ」があります。通常のマージは現在のクエリにステップを追加しますが、こちらは元のクエリを変更せずに、新しいクエリとして結果を生成します。元のクエリを汚したくない場合や、同じクエリを別の結合にも使い回したい場合に便利です。
追加(縦結合)の基本操作
「追加」は、同じ構造のテーブルを縦に積み重ねる操作です。月ごとの売上ファイルをまとめたり、支店別データを統合したりするときに使います。
1月売上
| 日付 | 商品 | 売上 |
|---|---|---|
| 1/5 | A | 10000 |
| 1/12 | B | 5000 |
2月売上
| 日付 | 商品 | 売上 |
|---|---|---|
| 2/3 | A | 12000 |
| 2/20 | C | 8000 |
操作手順
1. いずれかのクエリをエディターで開きます。
2. ホーム タブ → クエリの追加 をクリックします。
3. 「2つのテーブル」を選択し、ドロップダウンから追加したいテーブルを選んで「OK」。
※3つ以上のテーブルを一度に追加したい場合は「3つ以上のテーブル」を選択し、リストに追加します。
結果(追加後)
| 日付 | 商品 | 売上 |
|---|---|---|
| 1/5 | A | 10000 |
| 1/12 | B | 5000 |
| 2/3 | A | 12000 |
| 2/20 | C | 8000 |
追加する2つのテーブルで列名が異なる場合(「売上金額」と「売上」など)、Power Queryはそれぞれ別の列として扱い、一致しない列には null が入ります。事前に列名を統一しておくか、追加後に不要な列を削除してください。
実践例 ― 売上データにマスタを結合して金額を算出
Step 1:マージで商品マスタを結合
売上クエリ → ホーム → クエリのマージ → 商品マスタ → キー「商品コード」→ 左外部 → 展開(商品名、単価)
Step 2:カスタム列で金額を計算
列の追加 → カスタム列 → [数量] * [単価]
Step 3:null行を確認(左反結合で検証)
別途「新しいクエリとしてマージ」→ 左反結合 で、マスタに未登録の商品コードを洗い出し。
VLOOKUPで何千行もコピーしていた作業が、3ステップで完了します。しかもデータが増えても「更新」するだけです。
まとめ
テーブル結合のポイントは4つです。マージは横方向にデータを引っ張ってくる操作で、VLOOKUPの上位互換です。追加は縦方向に行を積み重ねる操作で、月次データの統合などに使います。マージの6種の結合型のうち、左外部がVLOOKUP相当で最も頻繁に使い、左反は「存在しないもの探し」に非常に便利です。そして結合キーのデータ型を揃えることを忘れないでください。Power QueryはVBAの完全な代替ではありませんが、結合・整形・統合の定型処理ではマクロを書かずに再実行できる強みがあります。