テーブルの結合 ― マージと追加

このページのゴール

Power Queryでテーブルを結合する2つの方法 ―「マージ(横方向に列を増やす=VLOOKUP的)」と「追加(縦方向に行を増やす=UNION的)」― の違いを理解し、6種類の結合型を場面に応じて使い分けられるようになることです。

VBAが使えない、マクロ禁止の職場では、VLOOKUP的な結合処理や月次データの統合をPower Queryで代替できる場面が多くあります。

「マージ」と「追加」の違い

マージ(Merge)追加(Append)
方向横方向 ― 列が増える縦方向 ― 行が増える
イメージVLOOKUP / XLOOKUP で別テーブルの列を引っ張ってくる2つの表を上下に貼り合わせる(Excelの「コピー&末尾に貼り付け」)
前提条件両テーブルに共通のキー列(商品コード、社員番号など)が必要両テーブルの列構成が同じ(または似ている)こと
SQL相当JOINUNION ALL

マージ(横結合)の基本操作

サンプルデータ

売上テーブル

注文ID商品コード数量
1001A013
1002B021
1003A015
1004C032

商品マスタ

商品コード商品名単価
A01ノートPC80000
B02マウス3000
D04キーボード5000

売上テーブルに商品名と単価を付加したい ― Excelなら VLOOKUP を使う場面です。

操作手順

1. 売上テーブルのクエリをエディターで開きます。
2. ホーム タブ → クエリのマージ をクリックします。
3. ダイアログ上部に現在のテーブル(売上テーブル)が表示されます。下部のドロップダウンから商品マスタを選択します。
4. 上のテーブルで「商品コード」列をクリック、下のテーブルでも「商品コード」列をクリックして、キー列を対応付けます。
5. 「結合の種類」は「左外部(最初のテーブルのすべての行と、2番目のテーブルの一致する行)」のままで「OK」。
6. 右端に「商品マスタ」というテーブル型の列が追加されます。
7. その列のヘッダーにある展開ボタン(⇔アイコン)をクリックします。
8. 展開したい列(商品名、単価)にチェックを入れ、「元の列名をプレフィックスとして使用します」のチェックは外して「OK」。
9. 商品名と単価の列が追加されます。

結果

注文ID商品コード数量商品名単価
1001A013ノートPC80000
1002B021マウス3000
1003A015ノートPC80000
1004C032nullnull

注文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/5A10000
1/12B5000

2月売上

日付商品売上
2/3A12000
2/20C8000

操作手順

1. いずれかのクエリをエディターで開きます。
2. ホーム タブ → クエリの追加 をクリックします。
3. 「2つのテーブル」を選択し、ドロップダウンから追加したいテーブルを選んで「OK」。
※3つ以上のテーブルを一度に追加したい場合は「3つ以上のテーブル」を選択し、リストに追加します。

結果(追加後)

日付商品売上
1/5A10000
1/12B5000
2/3A12000
2/20C8000
列名が一致しない場合
追加する2つのテーブルで列名が異なる場合(「売上金額」と「売上」など)、Power Queryはそれぞれ別の列として扱い、一致しない列には null が入ります。事前に列名を統一しておくか、追加後に不要な列を削除してください。

実践例 ― 売上データにマスタを結合して金額を算出

Step 1:マージで商品マスタを結合

売上クエリ → ホーム → クエリのマージ → 商品マスタ → キー「商品コード」→ 左外部 → 展開(商品名、単価)

Step 2:カスタム列で金額を計算

列の追加 → カスタム列 → [数量] * [単価]

Step 3:null行を確認(左反結合で検証)

別途「新しいクエリとしてマージ」→ 左反結合 で、マスタに未登録の商品コードを洗い出し。

VLOOKUPで何千行もコピーしていた作業が、3ステップで完了します。しかもデータが増えても「更新」するだけです。

まとめ

テーブル結合のポイントは4つです。マージは横方向にデータを引っ張ってくる操作で、VLOOKUPの上位互換です。追加は縦方向に行を積み重ねる操作で、月次データの統合などに使います。マージの6種の結合型のうち、左外部がVLOOKUP相当で最も頻繁に使い、左反は「存在しないもの探し」に非常に便利です。そして結合キーのデータ型を揃えることを忘れないでください。Power QueryはVBAの完全な代替ではありませんが、結合・整形・統合の定型処理ではマクロを書かずに再実行できる強みがあります。