

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

はい、できますよ!
その場合、「クエリのマージ」・「マージ」コマンドの「結合の種類」を設定すれば、2つの表の一致や差異のレコードを特定できますよ!
では、詳細を解説していきますね。
はじめに
この記事は「クエリのマージ」・「マージ」コマンドの使い方を把握していることが前提です。
「クエリのマージ」・「マージ」コマンドの詳細は、以下の記事をご参照ください。
解説動画:【パワークエリ#7】データ転記・連結テクニック – 複数の表データを結合し、一つに集約する作業を自動化する(クエリのマージ/クエリの追加) この記事の内容は下記の動画でも解説しています。 コメント欄 …
「クエリのマージ」・「マージ」の「結合の種類」の使いどころ
「クエリのマージ」・「マージ」コマンドは、Power Queryエディターでデータ転記を行うことが一般的な使い方です。
実は、この「クエリのマージ」・「マージ」コマンドはデータ転記以外にも、2つの表の一致や差異のレコードを残してマージすることも可能です。
「クエリのマージ」・「クエリ」コマンドで起動できる「マージ」ダイアログ上の「結合の種類」ボックスの設定を変更するだけで、2つの表の一致や差異のレコードを残すことが可能です。
なお、この場合もデータ転記と同様、主キーを基準に一致しているか否かを判定します。
主キーとは、そのレコードが一意(重複していない)であることを示すためのコードや番号のこと(代表例として、社員番号や商品コードなど)。
「結合の種類」の6パターン
「マージ」ダイアログの「結合の種類」ボックスで設定できる内容は、以下の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スライド)等をプレゼント!
ご参考になれば幸いですm(_ _)m

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