Power Queryで2つのExcelを比較|差分・追加・削除を抽出する方法
どうも、まっすーです。
Power Queryで2つのExcelデータを比較するには、完全外部結合でデータをマージし、カスタム列で一致・変更・追加・削除を判定します。
毎月の購買単価や品目マスタを、目視やExcel関数で比較していませんか?
- 前月と当月の一覧を見比べて、単価の変更を探している
- VLOOKUPやXLOOKUPで照合したあと、追加・削除された品目を別途確認している
- 毎月同じ数式をコピーして、比較表を作り直している
- 確認する件数が多く、見落としや作業の属人化が気になる
こうした作業には、ExcelのPower Query(パワークエリ)を活用できます。
この記事では、前月と当月の品目マスタを比較し、「一致・変更・追加・削除」を一覧にする方法を解説します。一度比較の仕組みを作れば、次回からは元データを入れ替えて更新することで、同じ処理を繰り返せます。
業務改善で大切なのは、比較表を作ることに加えて、確認が必要なデータを絞り、担当者が判断しやすい形にすることです。翌月の更新方法や、実務で注意したい点も紹介します。
- 完成イメージ:変更された単価と追加・削除された品目を一覧化する
- VLOOKUP・XLOOKUPとの違い:繰り返す比較作業にPower Queryを使う
- 今回の比較方法と前提条件
- 手順1:前月と当月のサンプルデータを用意する
- 手順2:Power Queryに取り込み、列名とデータ型を整える
- 手順3:完全外部結合で2つのデータをマージする
- 手順4:当月データの列を展開する
- 手順5:比較用の品目コードを作る
- 手順6:一致・変更・追加・削除を判定する
- 手順7:単価差を追加する
- 手順8:比較結果をExcelに出力する
- 翌月からは、元データを入れ替えて更新する
- 別々のExcelファイルを比較する場合
- 実務でつまずきやすいポイント
- 製造業の経理・購買・管理業務でどう活用するか
- Power QueryでExcelの差分を比較するときのよくある質問
- Excel比較・照合の業務改善についてご相談ください
- まとめ:毎月の照合を、差分を確認する作業へ変える
完成イメージ:変更された単価と追加・削除された品目を一覧化する
今回は、次のような比較表を作成します。
| 比較用コード | 前月単価 | 当月単価 | 単価差 | 比較結果 |
|---|---|---|---|---|
| A001 | 100 | 100 | 0 | 一致 |
| A002 | 200 | 220 | 20 | 変更 |
| A003 | 150 | 150 | 0 | 一致 |
| A004 | 50 | なし | なし | 削除 |
| A005 | なし | 80 | なし | 追加 |
※「なし」は、Power Query上では null、Excelへの出力後は通常、空欄で表示されます。行の並び順は、後述の並べ替えで整えます。
「変更・追加・削除」だけに絞れば、全件を目視で見比べる作業から、差分を中心に確認する作業へ変えられます。
ただし、今回の「一致」は、比較対象に指定した品目名と単価が一致しているという意味です。取引先や適用日など、ほかの項目も確認したい場合は、その項目を判定に追加します。
VLOOKUP・XLOOKUPとの違い:繰り返す比較作業にPower Queryを使う
少量のデータを一度だけ照合する場合は、VLOOKUPやXLOOKUPでも対応できます。ただし、検索関数を片側の一覧だけに設定すると、もう片側だけにある品目の確認には別の処理が必要です。
Power Queryでは、取り込み・結合・判定を処理手順として保存できます。毎月同じ形式のデータを比較する場合や、複数項目をまとめて確認する場合に使いやすい方法です。データ量や処理内容によって所要時間は変わるため、関数より必ず速くなるとは限りません。
今回の比較方法と前提条件

この記事は、Windows版ExcelのPower Queryを使う想定です。Excelのバージョンによって、メニュー名や表示位置が異なる場合があります。
操作を試しやすいように、まずは1つのExcelブック内にある2つのテーブルを比較します。別々のExcelファイルを比較する場合の取り込み方法は、記事後半で紹介します。
今回の比較では、次の条件を前提とします。
- 品目コードを、同じ品目を識別するためのキーとして使う
- それぞれのデータ内で、品目コードが重複していない
- 品目コードに空欄やエラーがない
- 前月と当月で、品目コードの付け方が変わっていない
- 単価の通貨・単位など、比較する条件がそろっている
例えば、同じ品目コードでも工場ごとに単価が異なる場合は、品目コードだけでは正しく比較できません。「工場コード+品目コード」のように、比較する1行を特定できるキーを使います。
手順1:前月と当月のサンプルデータを用意する

新しいExcelブックに「前月」「当月」という2つのシートを作成し、それぞれ次のデータを入力してください。単価には「円」などの文字を付けず、数値だけを入力します。
前月の品目マスタ
| 品目コード | 品目名 | 単価 |
|---|---|---|
| A001 | ネジ | 100 |
| A002 | ボルト | 200 |
| A003 | ナット | 150 |
| A004 | ワッシャー | 50 |
当月の品目マスタ
| 品目コード | 品目名 | 単価 |
|---|---|---|
| A001 | ネジ | 100 |
| A002 | ボルト | 220 |
| A003 | ナット | 150 |
| A005 | ピン | 80 |
今回の例では、A002の単価が変更され、A004が当月の一覧からなくなり、A005が新しく追加されています。
データ範囲をExcelのテーブルに変換する
- 前月シートで、見出しを含むデータ範囲を選択します。
- Ctrl+Tを押します。
- 「先頭行をテーブルの見出しとして使用する」にチェックを入れます。
- 「OK」をクリックします。
- 「テーブルデザイン」タブで、テーブル名を「前月マスタ」に変更します。
当月シートも同様にテーブルに変換し、テーブル名を「当月マスタ」にしてください。
テーブル名とシート名は別のものです。ここでは、取り込み元を分かりやすくするために、テーブルにも名前を付けています。
手順2:Power Queryに取り込み、列名とデータ型を整える

前月マスタを取り込む
- 「前月マスタ」のテーブル内をクリックします。
- 「データ」タブから「テーブルまたは範囲から」を選択します。
- Power Queryエディターで、クエリ名を「前月データ」に変更します。
続いて、列見出しをダブルクリックし、次の名前に変更します。
| 元の列名 | 変更後の列名 | 設定するデータ型 |
|---|---|---|
| 品目コード | 前月品目コード | テキスト |
| 品目名 | 前月品目名 | テキスト |
| 単価 | 前月単価 | 固定小数点数 |
データ型は、列見出しの左にあるアイコンから変更できます。「現在のものを置換」か「新しいステップの追加」かを聞かれた場合は、ここでは「現在のものを置換」を選びます。
今回の単価は整数ですが、前月・当月とも固定小数点数にそろえます。固定小数点数は小数点以下4桁の精度を持つ型で、5桁目以降は変換時に丸められます。小数点以下5桁以上の差も比較する業務では、この設定をそのまま使わず、必要な精度とデータ型を検討してください。
データ型の詳細は、Microsoft公式のデータ型の解説で確認できます。
設定後、「ホーム」→「閉じて読み込む」の右側のメニュー→「閉じて次に読み込む」を選び、「接続の作成のみ」で保存します。
当月マスタも取り込む
当月マスタも同じ手順で取り込み、クエリ名を「当月データ」にします。列名とデータ型は、次のように設定してください。
| 元の列名 | 変更後の列名 | 設定するデータ型 |
|---|---|---|
| 品目コード | 当月品目コード | テキスト |
| 品目名 | 当月品目名 | テキスト |
| 単価 | 当月単価 | 固定小数点数 |
こちらも「接続の作成のみ」で保存します。
ポイント:結合に使う品目コードは、両方ともテキスト型にそろえます。例えば「00123」というコードが、取り込み前に数値の「123」へ変わっていた場合、あとからテキスト型に変更しても先頭のゼロは戻りません。元データの段階から注意してください。
手順3:完全外部結合で2つのデータをマージする

- Excelの「データ」→「クエリと接続」を開きます。
- 「前月データ」をダブルクリックします。
- Power Queryエディターの「ホーム」→「クエリのマージ」のメニューを開きます。
- 「クエリを新規クエリとしてマージ」を選択します。
マージ画面では、次のように設定します。
| 設定項目 | 設定内容 |
|---|---|
| 上側のテーブル | 前月データ |
| 上側の結合キー | 前月品目コード |
| 下側のテーブル | 当月データ |
| 下側の結合キー | 当月品目コード |
| 結合の種類 | 完全外部(両方のすべての行) |
上下それぞれの品目コード列をクリックし、「OK」を押してください。あいまい一致の設定が表示される場合は、今回は使用しません。
新しく作成されたクエリの名前を「品目比較」に変更します。
完全外部結合を使う理由
追加と削除の両方を確認するには、前月・当月のどちらか一方にしかない品目も残す必要があります。
完全外部結合は、両方のテーブルのすべての行を取得する結合方法です。前月を基準にした左外部結合では、当月にだけ存在する新しい品目を取得できないため、今回は完全外部結合を使います。
結合方法の詳細は、Microsoft公式の完全外部結合の解説も参考にしてください。
手順4:当月データの列を展開する

マージ後は、右側に「当月データ」という列が追加されます。この段階では、当月の情報が列の中にまとめられています。
- 「当月データ」列の見出し右側にある展開ボタンをクリックします。
- 「当月品目コード」「当月品目名」「当月単価」を選択します。
- 「元の列名をプレフィックスとして使用します」のチェックを外します。
- 「OK」をクリックします。
すでに列名に「前月」「当月」を付けているため、ここではプレフィックスを付けずに展開します。
展開後の列名が、次の6つになっていることを確認してください。
- 前月品目コード
- 前月品目名
- 前月単価
- 当月品目コード
- 当月品目名
- 当月単価
前月にしかないA004は当月側が null、当月にしかないA005は前月側が null になります。
手順5:比較用の品目コードを作る

追加された品目は、前月側のコードが空になります。そこで、前月・当月のどちらに存在する品目でも表示できる「比較用コード」を作ります。
「列の追加」→「カスタム列」を選び、新しい列名を「比較用コード」にします。「カスタム列の式」に、次の式を入力してください。
1 2 3 | if [前月品目コード] = null then [当月品目コード] else [前月品目コード] |
カスタム列の入力欄では、式の先頭に = を付ける必要はありません。ここで使う式は、Excelのセル数式ではなく、Power QueryのM言語です。
前月側にコードがあれば前月の値を使い、なければ当月の値を使います。作成後、「比較用コード」のデータ型をテキストに設定してください。
手順6:一致・変更・追加・削除を判定する

もう一度「列の追加」→「カスタム列」を選び、新しい列名を「比較結果」にします。次の式を入力してください。
1 2 3 4 5 6 | if [前月品目コード] = null then "追加" else if [当月品目コード] = null then "削除" else if [前月品目名] = [当月品目名] and [前月単価] = [当月単価] then "一致" else "変更" |
作成後、「比較結果」のデータ型をテキストに設定します。
この式は、次の順番で判定しています。
- 前月側にコードがない場合は「追加」
- 当月側にコードがない場合は「削除」
- 品目名と単価の両方が同じ場合は「一致」
- それ以外は「変更」
注意:この判定は、元データの品目コードに空欄がないことを前提にしています。また、両月の単価が空欄なら、単価については同じ値として扱われます。単価の未入力を問題として検出したい場合は、別途チェックを追加してください。
「削除」は、当月の比較対象に存在しないという意味
ここでの「削除」は、当月データに同じコードが見つからなかったという判定です。
実務では、品目が本当に削除された場合だけでなく、抽出対象の工場が変わった、システムからの出力が漏れた、といった理由でも同じ結果になります。業務上の削除かどうかは、元データの抽出条件も含めて確認しましょう。
手順7:単価差を追加する

変更された単価を確認しやすくするため、「当月単価-前月単価」の列を追加します。
「列の追加」→「カスタム列」を選び、新しい列名を「単価差」にします。次の式を入力してください。
1 2 3 | if [前月単価] = null or [当月単価] = null then null else [当月単価] - [前月単価] |
作成後、「単価差」のデータ型を固定小数点数に設定します。
A002の場合は、220-200で「20」になります。プラスなら単価上昇、マイナスなら単価下落です。追加・削除された品目など、片方の単価がない場合は空欄にします。
なお、単価差だけで購買金額や原価への影響額が分かるわけではありません。影響額を確認するには、数量や適用期間なども組み合わせる必要があります。
手順8:比較結果をExcelに出力する

出力前に、列をドラッグして、次の順番に並べると見やすくなります。
- 比較用コード
- 前月品目名
- 当月品目名
- 前月単価
- 当月単価
- 単価差
- 比較結果
「前月品目コード」「当月品目コード」は、確認用として右側に残しておくと、判定の根拠を追いやすくなります。
「比較用コード」のフィルターメニューから昇順に並べ替えます。その後、「ホーム」→「閉じて読み込む」の右側のメニュー→「閉じて次に読み込む」を選びます。「データのインポート」画面で「テーブル」「新規ワークシート」を選択し、「OK」で出力してください。
今回のサンプルでは、結果は5行になります。
- 一致:2件
- 変更:1件
- 追加:1件
- 削除:1件
Excelに出力された表の「比較結果」でフィルターを使うと、変更・追加・削除だけを表示できます。
最初は、Power Query側で一致行を削除せず、全件を出力する方法がおすすめです。一致件数を含めて確認でき、比較結果全体の点検にも使えます。
翌月からは、元データを入れ替えて更新する

比較の仕組みが完成したら、翌月は次の流れで使います。
- 「前月マスタ」に比較元のデータを入れます。
- 「当月マスタ」に比較先のデータを入れます。
- 両方のテーブルに、新しいデータがすべて含まれていることを確認します。
- Excelの「データ」→「すべて更新」を実行します。
- 更新の完了を確認してから、件数と比較結果を確認します。
行数が前回より少なくなる場合は、古い行が残らないように注意してください。元テーブルのデータ行を入れ替え、不要になった古いデータ行を削除またはクリアします。そのうえで、必要に応じて「テーブルデザイン」→「テーブルのサイズ変更」で範囲を調整してください。サイズ変更だけでは、テーブル外に残ったセルの値は消えません。
見出しとテーブル名は変更せず、データ部分を入れ替えます。比較結果の出力先に貼り付けても、取り込み元の更新にはなりません。
更新後に確認したいこと
- 前月・当月それぞれの取り込み件数が、元データと合っているか
- 型変換などのエラーが出ていないか
- 比較キーに重複や空欄がないか
- 追加・削除が不自然に増えていないか
- 前月と当月で、抽出対象や基準日がそろっているか
更新操作を簡単にすることと、結果を確認できることをセットで考えると、引き継ぎやすい仕組みになります。
別々のExcelファイルを比較する場合
前月・当月のデータが別ファイルに保存されている場合は、比較用のブックを作り、そのブックから2つのファイルを取り込みます。
- 比較用のExcelブックを開きます。
- 「データ」→「データの取得」→「ファイルから」→「Excelブックから」を選択します。
- 前月のファイルを選択します。
- ナビゲーターで比較対象のテーブルを選び、「データの変換」をクリックします。
- クエリ名・列名・データ型を、この記事の「前月データ」と同じ設定にします。
- 当月のファイルも同じように取り込みます。
元ファイルにExcelテーブルがない場合は、対象シートを選びます。その場合、不要な先頭行の削除や、見出し行の設定が必要になることがあります。
取り込み後のマージと判定は、この記事と同じ考え方で進められます。こちらの方法を使う場合は、同じ名前のクエリを重複して作らず、手順2の取り込み部分を置き換えてください。
ファイル名や保存場所が毎月変わる場合は、取り込み先の変更も必要です。継続運用するなら、固定の保存先に元ファイルを置く、指定フォルダーから対象ファイルを取得するなど、更新方法も決めておきましょう。
実務でつまずきやすいポイント
同じ品目コードが複数行あり、比較結果の行数が増える
前月に同じコードが2行、当月に同じコードが3行あると、そのコードについて展開後に2×3=6行になることがあります。
こうした場合は、重複行をすぐに削除するのではなく、なぜ複数行あるのかを確認します。工場、取引先、適用日などが違うなら、それらもキーに含める必要があるかもしれません。
見た目が同じコードなのに一致しない
余分な空白や、文字種の違いが原因になる場合があります。必要に応じて、比較前にトリミングなどで整えます。
ただし、全角・半角や大文字・小文字を同じものとして扱ってよいかは、業務のルールによります。正式には別のコードであるものまで統一しないようにしてください。
工場コードと品目コードを組み合わせて比較したい
Power Queryでは、複数列を結合キーに指定できます。マージ画面でCtrlキーを押しながら列を選択し、前月・当月で対応する列を同じ順番で選びます。
ただし、複数キーのデータに対応させる場合は、空欄の扱い、キーの一意性、追加・削除の判定も含めて見直してください。品目コードが同じでも工場が変わると、その組み合わせについては追加・削除として判定されます。
キーのデータ型や複数列の選択については、Microsoft公式のクエリのマージの解説でも確認できます。
品目コード自体が変更されている
今回の方法では、コードが変わると、旧コードは「削除」、新コードは「追加」と判定されます。
コード変更前後の同じ品目として比較するには、新旧コードの対応表などが必要です。名称が似ているだけで自動的に同じ品目と判断することは避け、照合ルールを決めましょう。
金額のわずかな差を変更として扱いたくない
今回の式は、単価の完全一致で判定します。実務で「小数点以下を丸めて比較する」「一定の差以内は許容する」といったルールがある場合は、その条件に合わせて判定を変更します。
比較を始める前にルールを明確にしておくと、結果を説明しやすくなります。
製造業の経理・購買・管理業務でどう活用するか
今回の比較方法は、次のような業務への応用が考えられます。
| 業務 | 比較対象 | 確認したいこと |
|---|---|---|
| 購買 | 旧単価マスタと新単価マスタ | 単価変更、対象品目の追加・削除 |
| 経理・原価管理 | 旧版と新版の品目別原価データ | 同じ条件で算出した原価の変更 |
| マスタ管理 | 変更前後の品目・取引先マスタ | 名称や管理項目の変更 |
| システム移行 | 旧システムと新システムの出力データ | 移行対象の漏れや項目の不一致 |
例えばSAPなどのシステムから出力したExcel・CSVも、比較できる形に整えれば取り込み元として使えます。ただし、システム間でコードや出力形式が異なる場合は、対応表や事前のデータ整形が必要です。
BOM(部品表)の比較にも応用できますが、親品目・子品目だけで1行を特定できるとは限りません。明細番号、代替部品、適用期間などを踏まえて、比較する単位を設計する必要があります。
Power QueryでExcelの差分を比較するときのよくある質問
変更・追加・削除だけを抽出できますか?
できます。手順6で「比較結果」を作成したあと、「一致」以外の行をフィルターします。最初は全件をExcelに出力して件数を点検し、Excel側のフィルターで絞る方法がおすすめです。
2つのExcelファイルを直接比較できますか?
できます。比較用のブックから、それぞれのファイルを「Excelブックから」で取り込み、同じ結合と判定を行います。毎月のファイル名や保存場所が変わる場合は、取り込み先の管理も必要です。
どの項目が変更されたかも分かりますか?
今回の式は、品目名または単価が違えば「変更」と判定します。変更された項目を自動表示したい場合は、「品目名変更」「単価変更」などの判定列を追加してください。前月・当月の列を残しておくことでも、変更内容を確認できます。
Excel比較・照合の業務改善についてご相談ください
この記事のサンプルは、品目コードが一意で、比較項目も少ないケースです。実際の業務では、次のような条件が加わることがあります。
- 複数の工場や部門から届くファイルをまとめて比較したい
- 工場コード・品目コード・取引先コードなどを組み合わせて照合したい
- どの項目が変更されたのか、確認しやすい一覧を作りたい
- 重複や未入力など、比較前に確認すべきデータも検出したい
- 担当者が変わっても、同じ手順で更新できるようにしたい
こうした業務では、比較式に加えて、元データの取り込み方法、照合ルール、例外の扱い、更新後の確認方法まで整理することが大切です。
業務改善ラボでは、Excel・Power Queryなどを活用した比較・照合業務の改善について、ご相談を受け付けています。現在の作業を確認し、継続して使える方法を検討します。
ご相談の際は、次の内容をお知らせいただくと、状況を整理しやすくなります。
- 比較しているデータの種類と形式(Excel・CSVなど)
- おおよそのファイル数・行数と、作業の頻度
- 現在の比較方法と、特に困っていること
- 比較結果を使って、誰が何を確認しているか
最初は、項目名や作業内容の説明だけで構いません。実データが必要な場合は、共有方法を相談したうえで進めます。
まとめ:毎月の照合を、差分を確認する作業へ変える
今回は、Power Queryで前月と当月の品目マスタを比較し、一致・変更・追加・削除を判定する方法を紹介しました。
- 比較前に、キーの重複・空欄とデータ型を確認する
- 完全外部結合で、前月・当月のどちらかにしかない品目も取得する
- 比較用コードと比較結果を作り、違いを一覧化する
- 翌月は元データを入れ替え、更新後の件数やエラーを確認する
まずはこの記事のサンプルで、5行の比較結果ができることを確認してみてください。そのうえで、自分の業務では何をキーにし、どの項目を比較する必要があるかを整理すると、実務に応用しやすくなります。
マージの基本操作から確認したい方は、関連記事のPower QueryでVLOOKUPやXLOOKUPを置き換える方法も参考にしてください。













