パワークエリの「マージ」ダイアログの「結合の種類」のサムネイル
AさんAさん

商品マスタを年度ごとにバージョン管理されますが、削除あるいは追加された商品を把握したいです。
パワークエリでこういった作業も自動化できますか?

森田森田

はい、できますよ!
その場合、「クエリのマージ」・「マージ」コマンドの「結合の種類」を設定すれば、2つの表の一致や差異のレコードを特定できますよ!
では、詳細を解説していきますね。

Excelステップ講座

はじめに

この記事は「クエリのマージ」・「マージ」コマンドの使い方を把握していることが前提です。

参考記事

「クエリのマージ」・「マージ」コマンドの詳細は、以下の記事をご参照ください。

「クエリのマージ」・「マージ」の「結合の種類」の使いどころ

「クエリのマージ」・「マージ」コマンドは、Power Queryエディターでデータ転記を行うことが一般的な使い方です。

実は、この「クエリのマージ」・「マージ」コマンドはデータ転記以外にも、2つの表の一致や差異のレコードを残してマージすることも可能です。

「マージ」ダイアログの「結合の種類」の使いどころ

「クエリのマージ」・「クエリ」コマンドで起動できる「マージ」ダイアログ上の「結合の種類」ボックスの設定を変更するだけで、2つの表の一致や差異のレコードを残すことが可能です。

なお、この場合もデータ転記と同様、主キーを基準に一致しているか否かを判定します。
主キーとは、そのレコードが一意(重複していない)であることを示すためのコードや番号のこと(代表例として、社員番号や商品コードなど)。

「結合の種類」の6パターン

「マージ」ダイアログの「結合の種類」ボックスで設定できる内容は、以下の6パターンです。

「マージ」ダイアログの「結合の種類」の6パターン

  1. 左外部(デフォルト)
  2. 右外部
  3. 完全外部
  4. 内部
  5. 左反
  6. 右反

「左」や「右」といった表現が多いですが、「左」は「マージ」ダイアログの上側に設定したクエリ、「右」は「マージ」ダイアログの下側に設定したクエリをそれぞれ示します。

個人的には、「右」が付くものは指定するクエリを間違えてしまう恐れがあるため、パターン②⑥は覚えなくて良いと思います。

使用イメージ

「マージ」ダイアログの「結合の種類」ボックスの6パターンそれぞれの使用イメージを順番に解説します。

解説に際し、「マージ」ダイアログの上側のクエリを「表A」、下側のクエリを「表B」とします。

【パターン①】左外部

パターン①は「左外部」です。

デフォルトのパターンとなり、データ転記をしたい場合に使います。

「マージ」ダイアログの「結合の種類」の使用イメージ(左外部)

表Aのレコードに対し、主キーを基準に表Bから任意の列をマージします。

つまり、表Aはすべてのレコードは残りますが、表B側は表Aに存在しない主キーのレコードは残りません。

また、表Aの主キーに一致する表B側のデータがない列は「null」になります。

【パターン②】右外部

パターン②は「右外部」です。

こちらもデータ転記をしたい場合に使いますが、「マージ」ダイアログの上下が逆のパターンになります。

「マージ」ダイアログの「結合の種類」の使用イメージ(右外部)

表Bのレコードに対し、主キーを基準に表Aから任意の列をマージします。

あえてパターン①と使い分けを行う理由はないので、実務では使わないで良いと思います。

「マージ」ダイアログで上下のクエリの指定に気を付ければ充分でしょう。

【パターン③】完全外部

パターン③は「完全外部」です。

2つの表の全レコードを残し、一致と差異をまとめて整理したい場合に使いましょう。

「マージ」ダイアログの「結合の種類」の使用イメージ(完全外部)

主キーを基準に表A・Bのすべてのレコードを1つの表へマージし、一方の表にしかデータがない列は「null」になります。

表Bの列は通常のデータ転記(パターン①)と同様に、選択した列のみが展開されます。

マージする2つの表が同じ列構成の場合、列の展開時にプレフィックスのチェックをONにし、表Bのものを区別できるようにすると良いですね。
表Bのクエリ名が「商品マスタ_2022」の場合、列名の頭に「商品マスタ_2022.」が付加。

2つの表の不一致(「null」があるレコード)を特定できる以外にも、2つの表で共通する列(「単価」等)のデータの相違も確認できます。

ちなみに、うまく「条件列」コマンドを活用し、任意のレコードを絞込みができるようにフラグ立てすると便利です。
表A・Bの主キー列のいずれか一方が「null」ならTRUE等。
「条件列」コマンドは、後日別記事にまとめる予定。

【パターン④】内部

パターン④は「内部」です。

2つの表の一致レコードだけ必要な場合に使いましょう。

「マージ」ダイアログの「結合の種類」の使用イメージ(内部)

表A・Bで主キーを基準に一致するレコードのみを1つの表に残します。

パターン③と違い、表A・Bの一方にしか存在しないレコードはマージ対象外になるため、「null」の部分は発生しません(もともと「null」のデータ除く)。

2つの表で共通する列(「単価」等)のデータの相違を中心に確認したい場合に便利です。

【パターン⑤】左反

パターン⑤は「左反」です。

一方の表の差異レコードだけ必要な場合に使いましょう。

「マージ」ダイアログの「結合の種類」の使用イメージ(左反)

主キーを基準に表Aのみ存在するレコードを1つの表に残します。

よって、当然ながら表B側の列はすべて「null」となります。

そのため、表B側の列はわざわざ展開せず、表Bのテーブル列自体を削除しても問題ないですね。

【パターン⑥】右反

パターン⑥は「右反」です。

一方の表の差異レコードだけ必要な場合に使い使いますが、「マージ」ダイアログの上下が逆のパターンになります。

「マージ」ダイアログの「結合の種類」の使用イメージ(右反)

主キーを基準に表Bのみ存在するレコード1つの表に残し、表A側の列はすべて「null」となります。

あえてパターン⑤と使い分けを行う理由はないので、実務では使わないで良いと思います。

サンプルファイルで練習しよう!

可能であれば、以下のサンプルファイルをダウンロードして、実際に操作練習をしてみてください。

サンプルファイル_PowerQueryデータ整形_クエリのマージ_結合の種類.xlsx

サンプルファイルのダウンロードには無料メルマガに登録いただく必要があります(上記リンクから登録フォームへ遷移します)。

ブックを開いたら、「マージ」ダイアログの「結合の種類」の6パターンを実際に試してみてください。
「クエリのマージ」・「マージ」コマンドのステップ登録手順は該当記事を参照すること。

さいごに

いかがでしたでしょうか?

「マージ」ダイアログの「結合の種類」ボックスを活用することで、主キーを基準に2つの表の一致・差異レコードを特定できます。

特に、同じ列構成でバージョン管理しているマスタ等のメンテナンスで役立ちますので、実務で機会のある方は活用してみてください。

なお、パワークエリの各種テクニックは、私の拙著でも体系的に解説していますので、こちらも参考にしてみてください。


また、よりコアな情報を発信していくために「公式LINE」を開始しましたので、ご興味があれば以下バナーから友だち追加をお願いします!
特典として、Excelワークシート関数一覧(計22スライド)やExcelショートカットキー一覧(計25スライド)等をプレゼント!

森田貢士の公式LINEへの友だち追加告知用バナー

ご参考になれば幸いですm(_ _)m

森田森田

「クエリのマージ」・「マージ」コマンドは、マウス操作中心で設定できる上に、ワークシート上のVLOOKUP等よりも多機能で便利です。
他にも、別表の行データを追加できる「クエリの追加」・「追加」コマンドも併用すると、複数の表を自由自在に集約できますね。
表の集約作業は、業界や業種を問わず実務での頻度が高いので、パワークエリをうまく活用していきましょう!