先月と今月のリストを並べて、目で追いながら差分を探している。数式に置き換えたいが、COUNTIF と XLOOKUP のどちらを使えばよいか分からない。この記事は、その困りごとを扱います。
結論は、行があるか無いかは COUNTIF、数量などの値が変わったかは XLOOKUP で見ることです。いちばん大事なのは、COUNTIF を今月→先月と先月→今月の両方向で入れることです。片方向だけだと、今月から消えた行を見落とします。
この記事で分かること
- 2つのリストを比べて「増えた・消えた・変わった」行を洗い出す方法
- 片方向だけの突合で消えた行を見落とす失敗と、その防ぎ方
- COUNTIF・XLOOKUP・FILTER のどれを使えばよいかの判断

今月リストに突合の数式を入れた完成図
D5 に「今月から増えた」、F3 に先月との差 -15 が出ています。H2 からは、差異のある2行だけが一覧で出ています。
COUNTIF・XLOOKUP・FILTER の使い分け
3つの関数は、返すものが違います。組み合わせて使うのが基本です。
| やりたいこと | 使うもの | 返すもの | 対応バージョン |
|---|---|---|---|
| 行があるか無いかを知りたい | COUNTIF | 件数(0なら無い) | すべて |
| 対応する値を持ってきたい | XLOOKUP(無ければVLOOKUP) | 相手側の値 | Microsoft 365 / 2021以降 |
| 差異のある行だけ一覧にしたい | FILTER + SUMIF | 差異のある行 | Microsoft 365 / 2021以降 |
| 毎月繰り返す・列が多い | Power Query(マージ) | 突合した表 | 2016以降 |
COUNTIF で増減を見て、XLOOKUP で値の変化を見る。この2つを並べて使うのが、この記事の手順です。
どんな場面で使うか
- 在庫表・台帳の月次比較(先月と今月で何が変わったか)
- システムから出力した一覧と、手作業で管理している一覧の照合
- 送ったデータと返ってきたデータの突き合わせ
- 名簿・マスターの更新差分の確認
使うデータ
サンプルファイル(記事末尾)には「今月リスト」「先月リスト」の2つのシートがあります。どちらも A列が商品コード、B列が商品名、C列が数量で、データは2行目から6行目までです。

今月リストシート(A1:C6)

先月リストシート(A1:C6)
2枚の間にある差異は、次の3種類です。
| 種類 | 該当 | 気づきやすさ |
|---|---|---|
| 今月に増えた | A-1005 付箋 | 気づきやすい |
| 今月から消えた | A-1004 消しゴム | 見落としやすい |
| 両方にあるが数量が違う | A-1002 ノート(95 → 80) | 目視ではまず気づけない |
つまずきやすい点:今月リストだけを見ると、消えた行は出てこない
今月リストを1行ずつ先月と照合すると、今月リストに無い A-1004 は照合の対象にならず素通りします。これが片方向突合の落とし穴です。突合は必ず両方向で見ます。
手順
今月に増えた行を見る(COUNTIF)
- 「今月リスト」シートの D2 を選ぶ
- 次の数式を入力して
Enterを押す
=IF(COUNTIF(先月リスト!$A$2:$A$6, A2)=0, "今月から増えた", "")
D2 を D6 までコピーします。

今月リストの D2:D6 に COUNTIF を入れた画面
A-1005 の行(D5)だけに「今月から増えた」と出ます。
COUNTIF は、その値が範囲の中にいくつあるかを数える関数です。0件なら先月に無かった行です。範囲を $A$2:$A$6 と $ 付きで書くのは、コピーしても参照先がずれないようにするためです。
今月から消えた行を見る(ここを飛ばさない)
- 「先月リスト」シートの D2 を選ぶ
- 参照先を入れ替えた次の数式を入力して
Enterを押す
=IF(COUNTIF(今月リスト!$A$2:$A$6, A2)=0, "今月から消えた", "")
D2 を D6 までコピーします。

先月リストの D2:D6 に COUNTIF を入れた画面
A-1004 の行(D5)に「今月から消えた」と出ます。この2本をセットにして初めて、増減の両方が拾えます。
数量が変わった行を見る(XLOOKUP)
- 「今月リスト」シートの E2 を選ぶ
- 次の数式を入力して
Enterを押す
=XLOOKUP(A2, 先月リスト!$A$2:$A$6, 先月リスト!$C$2:$C$6, "先月に無し")
E2 を E6 までコピーします。

今月リストの E2:E6 に先月の数量を引いた画面
先月の数量が並びます。A-1002 は 95、先月に無い A-1005 は「先月に無し」です。
差を出すには、F2 に次の数式を入れて F6 までコピーします。
=IF(ISNUMBER(E2), C2-E2, "")

今月リストの F2:F6 に先月との差を出した画面
A-1002 の F3 が -15 になります。ISNUMBER で囲むのは、E列が「先月に無し」の行で引き算をさせないためです。
差異のある行だけを抜き出す(FILTER)
作業列を作らずに、差異のある行だけを別の場所へまとめて出す方法です。
- 「今月リスト」シートの H2(データの入っていない列)を選ぶ
- 次の数式を入力して
Enterを押す
=FILTER(A2:C6, C2:C6<>SUMIF(先月リスト!$A$2:$A$6, A2:A6, 先月リスト!$C$2:$C$6), "差異なし")

今月リストの H2 から差異のある2行がスピルした画面
結果は H2 から H2:J3 に自動で広がります(スピル)。A-1002 ノート 80 と、A-1005 付箋 60 の2行です。
SUMIF は、商品コードごとの先月の数量をまとめて取り出すために使っています。先月に無い商品コードは合計が 0 になるので、増えた行と数量が変わった行を1本の数式で拾えます。
先月側も同じように書きます。
- 「先月リスト」シートの H2 を選ぶ
- 次の数式を入力して
Enterを押す
=FILTER(A2:C6, C2:C6<>SUMIF(今月リスト!$A$2:$A$6, A2:A6, 今月リスト!$C$2:$C$6), "差異なし")

先月リストの H2 から差異のある2行がスピルした画面
A-1002 ノート 95 と、A-1004 消しゴム 30 の2行が返ります。消えた A-1004 が拾えていることを確認してください。
Excel 2019 以前で使う場合
XLOOKUP が使えない Excel 2013〜2019 では、今月リストの E2 に VLOOKUP と IFNA を組み合わせた次の式を入れ、E6 までコピーします。
=IFNA(VLOOKUP(A2, 先月リスト!$A$2:$C$6, 3, FALSE), "先月に無し")

VLOOKUP と IFNA で先月の数量を引いた画面
XLOOKUP と同じ値が並びます。3 は「先月リストのA列から数えて3列目(数量)」という意味です。列を挿入すると壊れるので、使えるなら XLOOKUP を選んでください。
毎月同じ突合を繰り返すなら、Power Query のマージ機能を使うと、翌月は更新ボタン1つで済みます。
よくあるエラー
数量が0の行と、存在しない行が区別できない
- 原因:
SUMIFを使った FILTER の書き方は、相手側に無い商品コードを0として扱います - 直し方: 数量に本当に
0が入りうるデータでは、COUNTIF の存在チェックと組み合わせて「無い」のか「0」なのかを分けます
同じ商品コードが2行以上ある
- 原因:
SUMIFは重複した行を合計し、XLOOKUPは最初の1件しか返しません - 直し方: 突合の前に重複を確かめます。今月リストの G2(H列の FILTER の結果と重ならない列)に次の数式を入れ、G6 までコピーします
=COUNTIF($A$2:$A$6, A2)

今月リストの G2:G6 で重複を確かめた画面
すべて 1 なら重複はありません。2以上の行があれば、その商品コードを先に整理します。
見た目は同じなのに一致しない
- 原因: 前後の空白、全角と半角の違い、数値と文字列の違いです
- 直し方: 見分け方はVLOOKUPが一致しない原因と直し方にまとめています
COUNTIF で意図しない一致が起きる
- 原因:
COUNTIFは*や?をワイルドカードとして解釈します - 直し方: 商品コードにこれらの記号が含まれる場合は、別のコードまで数えていないかを確かめます
FILTER が #SPILL!・#CALC! になる
- 原因と直し方: FILTER関数で「条件に合う行だけ抽出」にまとめています。
#CALC!は、上の数式のように第3引数("差異なし")を指定しておけば防げます
まとめ
突合でいちばん怖いのは、エラーが出ることではなく「消えた行に気づかないまま作業が終わること」です。行があるか無いかは COUNTIF、値が変わったかは XLOOKUP で見て、COUNTIF は必ず今月側・先月側の両方向に入れてください。差異のある行だけを一覧で出したい場合は、FILTER と SUMIF を組み合わせると、増えた行と値が変わった行を1本の数式でまとめて拾えます。
対応バージョン: XLOOKUP・FILTERは Microsoft 365 または Excel 2021 以降。Excel 2013〜2019 では XLOOKUP は本文の IFNA+VLOOKUP で置き換えます
関連記事
- 【Excel 関数】XLOOKUP × FILTER で複数条件の参照をシンプルにする — XLOOKUPとFILTERを組み合わせる考え方
- 【Excel 関数】FILTER関数で「条件に合う行だけ抽出」— オートフィルターとの違いと使い分け — FILTERの基本と第3引数
- 【Excel】XLOOKUP関数とテーブルを使用した簡単なデータ検索 — XLOOKUPの基本
- 【Excel】VLOOKUPが一致しない原因と直し方 — 空白・全角半角・型の違いを見分ける — 「見た目は同じなのに一致しない」の詳しい見分け方
- 【Power Query】最初にやる5つの操作 — 手を動かして覚える入門 — 毎月繰り返す突合をPower Queryに寄せる場合
サンプルファイル
記事中で使用しているサンプルデータはこちらからダウンロードできます。

