【Excel】Power Queryで
新旧データの差分をまとめて出す

公開日

今回は、Excelに標準装備されているPower Queryを使って、簡単に差分チェックをする方法をご紹介します。

どんな時に使えるか

新旧2つのExcelシートを比較して、どこが変わったのかを把握したいとき

例えば、次のような作業で使えます。

  • 今月と先月の顧客マスターを比較して、住所や担当者が変わった顧客を洗い出したい
  • 在庫リストの更新前後で、価格変更があった商品を特定したい
  • 提出された名簿と前回の名簿を突き合わせて、新規・削除・変更を一覧化したい

条件

両方のデータの体裁が同じで、共通の識別キー(ID、商品コードなど)があること

このページを読むとできるようになること

Power Queryを使って、以下の差分を自動抽出できるようになる

  • 新規追加された行
  • 削除された行
  • 変更された行とその値

一度設定すれば次回からも使えるので、簡単に新旧の差分が取得できるようになります。

差分抽出の設定の流れ

  1. <Excel> 新規Excelファイルを作成する
  2. <Excel> 新・旧ファイルをそれぞれ取り込む
  3. <Power Query>マージを設定する
    • 新規分の抽出:キーでマージ(左反)
    • 削除分の抽出:キーでマージ(右反)
    • 変更箇所抽出:キーでマージ(内部)+カスタム列

架空の取扱商品のマスターシートを用意しました。この2つのマスターシートを使って、簡単に差分を抽出する設定の方法を説明します。

ダウンロードして一緒に作業をしながら確認をしていただくこともできます。

項目は、「商品ID、商品名、カテゴリ、単価、仕入先コード、在庫区分」があり、それぞれ記載されています。

比較元となるExcelのサンプルデータ。商品IDや商品名が並んだ9月分と9月分のマスターデータ表
サンプル9月
比較元となるExcelのサンプルデータ。商品IDや商品名が並んだ9月分と10月分のマスターデータ表
サンプル10月

新・旧データをExcelに取り込む

最初に、「サンプル9月」を取り込みます。

  1. 新規のExcelを開く
  2. データデータの取得ファイルからExcelブックから を選ぶ
  3. ウィンドウが開くので、取得するファイル「サンプル9月」を選択して、インポート をクリックする
  4. ナビゲーターが開くので、「Sheet1」を選択、データの変換 をクリックする
  5. Power Queryエディターが開くので、クエリの設定で、クエリの名前を「一つ前」に変更する
  6. ホーム閉じて読み込む閉じて次に読み込む をクリック、接続の作成のみ を選択、一度Power Queryエディターを閉じる
Excelの「データ」タブから「データの取得」「ファイルから」「Excelブックから」を選択してファイルを取り込む手順

接続のみを選択したので、Excelシートに特に変化はありません。

次に、「サンプル10月分」のファイルを取得します。

2~ 5 の手順で、「サンプル10月分」のファイルを取得して、クエリの名前を「最新分」にします。

その後、6 の手順で閉じて、Excelも一度上書き保存をしておきましょう。

Excelのクエリウィンドウに「一つ前」「最新分」が表示されている状態

✅これで、Power Queryのエディターには、<一つ前>と<最新分>のクエリができました。
比較するデータを取得して、準備完了です。

新規データを抽出する

Power Queryエディタを開いて作業を続けます。

  1. <最新分>を選択し、右クリックで参照を選択する
  2. <最新分(2)>ができるので、名前を「新規」に変更する
  3. <新規>を選んだ状態で、
    ホームクエリのマージクエリのマージ* を選択する
  4. マージを設定する
    • 上のテーブル:新規
    • 下のテーブル:一つ前
  5. 両方とも「商品ID」を選択(「商品ID」がキー)
  6. 結合の種類:左反 (<最新分>にあるが、<一つ前>にはない行を抽出)
  7. OKをクリックする
  8. 「一つ前」列の を展開する

*マージ:数式を使わないで、別の表から情報を紐づけすること

Power Queryエディターのクエリの設定画面。参照作成したクエリの名前を最新分(2)から新規に変更する手順
👈Click! ちょっと脱線・・・結合の種類ってなに?

今回の差分抽出で使う結合の種類について確認をしておきましょう。

Power Queryのマージで使う結合の種類(左反、右反、内部)と、それぞれの目的(新規、削除、変更の抽出)をまとめた対応表

今回紹介するマージの設定はすべて
上のテーブルが<最新分>、下のテーブルが<一つ前>で設定しています。

Power Queryでは上のテーブルが、下のテーブルがに相当します。

  • 左反結合:左側のデータのうち、右側に一致しないデータを抽出する
  • 右反結合:右側のデータのうち、左側に一致しないデータを抽出する
  • 内部結合:両方に共通して存在するデータを抽出する

結合の種類は他にもありますので、もっと知りたい方は生成AIに聞いてみるのもいいでしょう。

削除データを抽出する

<新規>と同じ手順で設定します。クエリの名前と結合の種類の設定が異なります。

  1. <最新分>を選択し、右クリックで参照を選択する
  2. <最新分(2)>ができるので、名前を「削除」に変更する
  3. <削除>を選んだ状態で、
    ホームクエリのマージクエリのマージ を選択する
  4. マージを設定する
    • 上のテーブル:削除
    • 下のテーブル:一つ前
  5. 両方とも「商品ID」を選択(「商品ID」がキー)
  6. 結合の種類:右反 (<一つ前>にあるが、<最新分>にはない行を抽出)
  7. OKをクリックする
  8. 「一つ前」列の Power Queryエディターで、マージされたテーブル列を展開するアイコン を展開する

閉じて読み込む閉じて読み込む で一度保存をしましょう。

✅クエリ名と同じシートができました。新規、削除のアイテムだけがそれぞれのシートに抽出されました。

Excelのシート見出し。「削除」と「新規」のシートが自動的に作成されている様子

2つのクエリの変更箇所を抽出する

Power Queryエディターで、以下の設定を追加します。

  1. <最新分>を選択し、右クリックで参照を選択する
  2. <参照(2)>ができるので、名前を「比較」に変更する
  3. <比較>を選んだ状態で、
    ホームクエリのマージクエリのマージ を選択する
  4. マージを設定する
    • 上のテーブル:比較
    • 下のテーブル:一つ前
  5. 両方とも「商品ID」を選択(「商品ID」がキー)
  6. 結合の種類:内部 (<最新分>と<一つ前>の両方に存在する行を抽出)
  7. OKをクリックする
  8. 「一つ前」列の を展開する

念のため、閉じて読み込む閉じて読み込む で保存しておきましょう。

✅「比較」クエリで、<最新分>と<一つ前>の両方にあるデータが紐づきました。

再度Power Queryエディターを開き、<比較>クエリで作業を続けます。

”魔法”の式で、変更箇所を抽出する【カスタム列】

変更箇所の抽出には、カスタム列を追加します。
カスタム列の ”魔法”の式は、生成AIなどに聞くとすぐに答えてくれます。

①変更箇所を抽出する式

  1. <比較>を選択し、列の追加カスタム列 をクリックする
  2. 新しい列名を「変更箇所」に変更する
  3. カスタム列の式に下の式をそのままペーストし、OKをクリックする
Power Queryエディターの列の追加タブ。カスタム列をクリックして、変更箇所を抽出するための数式入力画面を開く操作
Text.Combine(
    List.Select(
        Table.ColumnNames(ソース),
        (col) => Record.Field(_, col) <> Record.Field(_, "一つ前." & col)
    ),
    ", "
)

👆<最新分>と<一つ前>のデータの異なる値を抽出する

②前の値を抽出する式

同じ手順で、もうひとつカスタム列を設定します。

  • 新しい列名:「前の値」
  • カスタム列の式:
Text.Combine(
    List.Transform(
        List.Select(
            Table.ColumnNames(ソース),
            (col) =>
                Record.Field(_, col) <>
                Record.Field(_, "一つ前." & col)
        ),
        (col) =>
            Text.From(
                Record.Field(_, "一つ前." & col)
            )
    ),
    ", "
)

👆<一つ前>と<最新分>とが異なる列の<一つ前>の値をカンマ区切りでつなげる

これで、変更箇所前の値が抽出できます。

  • 変更箇所:変更があった列名
  • 前の値:変更前の値
カスタム列によって「変更箇所」と「前の値」が自動抽出され、リスト化されたPower Queryのデータプレビュー

ホーム > 閉じて読み込む をクリックして、Power Queryエディターを閉じましょう。

✅Power Queryエディタで作ったクエリ名と同じ名前のシート(新規、削除、比較)が作成されました。

次回、同じフォームを使って差分を出したいとき、Power Queryエディターを開いて、<一つ前>と<最新分>のソースを変更するだけでOKです。

Power Queryを閉じた後、Excelの データすべて更新すべて更新 をクリックするとデータが更新されます。


例)今回は「サンプル9月」「サンプル10月分」だったけど、「サンプル10月」「サンプル11月分」をチェックしたい、という場合

お試し用に、サンプル11月分も準備しましたので、気になる方は試してみてください。

Power Queryエディターでクエリのソース設定を開き、参照ボタンから読み込むExcelファイルを変更してデータを更新する手順

🎁その他おまけ

見やすいように、Power Queryエディターで表示する列などはカスタムできるのでいろいろ試してみましょう。

  • クエリを見やすいようにグループで分ける
Power Queryエディターのクエリ一覧。作成した複数のクエリをフォルダ機能を使ってグループ分けし、見やすく整理したビフォーアフター
  • 必要なクエリだけ、シートに出力できる

 クエリ読み込み先データのインポート でいつでも変更できる
 Excelのデータのインポート画面。クエリのデータをテーブルとして既存のワークシートに出力するよう設定を変更している様子

など、お好みで見やすく整理することができます。

以上、Power Queryで簡単に差分チェックをする方法をご紹介しました。

最初は少し難しく感じる設定もあったかもしれませんが、一度設定してしまえば、Power Queryは忠実なアシスタントとして働き続けてくれます。

今回ご紹介した”魔法”を使って、定型的な業務を自動化してしまいましょう。

Power Queryって便利だなと思っていただけたら、ぜひご自身の業務にもこの”魔法”を応用してみてください。