Google スプレッドシートで 2 つのリストを比較する方法(一致と差分)
Google スプレッドシートには、2 つのリストを比較するための機能がそろっています。両方にある値を強調表示したり、欠けている値に印を付けたり、自動で更新される別のリストに差分を取り出したりできます。このガイドでは、シンプルな強調表示から列全体を一度に処理する数式まで、便利な方法を紹介します。
例ではすべて リスト A が A 列、リスト B が B 列 にあり、2 行目から始まり 1 行目が見出しだとします。B2:B のような終端を指定しない範囲は下のすべての行を含むので、新しい項目も自動的に対象になります。
一度だけ比較したい場合は、2 つのリストを無料の 2 つのリスト比較ツール に貼り付ければ、数式なしで A のみ・B のみ・両方にある項目がわかります。
1. 条件付き書式で一致を強調表示
- A2:A を選択します。
- 表示形式 → 条件付き書式 を開きます。
- セルの書式設定の条件 で カスタム数式 を選び、次のように入力します。
=COUNTIF($B$2:$B,$A2)>0
- 塗りつぶしの色を選んで 完了 をクリックします。
A のうち B にない 値を強調したい場合は、代わりに次を使います。
=COUNTIF($B$2:$B,$A2)=0
B2:B にも列を入れ替えたルールを追加すれば、リスト B にも色を付けられます。数式は範囲の最初のセル($A2)を基準に書き、ほかの行はスプレッドシートが自動で調整します。
2. COUNTIF や MATCH で各項目に印を付ける
補助列を使えば、並べ替えやフィルタができる結果が得られます。C2 に次のように入力します。
=IF(COUNTIF($B$2:$B,A2)>0,"一致","不一致")
MATCH を使うと TRUE か FALSE が返ります。
=ISNUMBER(MATCH(A2,$B$2:$B,0))
数式を下までドラッグし、データ → フィルタを作成 で一致または差分だけを表示します。
3. 1 つの数式で列全体をチェック(ARRAYFORMULA)
数式を各行にコピーする代わりに、C2 に ARRAYFORMULA を 1 つ入れるだけで列全体が埋まり、後から追加した行も対象になります。
=ARRAYFORMULA(IF(A2:A="",,IF(COUNTIF(B2:B,A2:A)>0,"一致","不一致")))
IF(A2:A="",,…) の部分で、空の行は「不一致」で埋めずに空白のままにします。
4. 一致・差分を新しいリストに抽出(FILTER)
FILTER はどちらかのリストが変わると自動で更新されるリストを返します。A のうち B にもある 値:
=FILTER(A2:A,A2:A<>"",COUNTIF(B2:B,A2:A)>0)
A のうち B にない 値:
=FILTER(A2:A,A2:A<>"",COUNTIF(B2:B,A2:A)=0)
A2:A<>"" の条件が重要です。これがないと、A の空行が B の空行と「一致」として数えられてしまいます。重複を除いて並べ替えるには、UNIQUE と SORT で囲みます。
=SORT(UNIQUE(FILTER(A2:A,A2:A<>"",COUNTIF(B2:B,A2:A)=0)))
数式の A と B を入れ替えれば、リスト B にだけある値が得られます。
5. XLOOKUP や VLOOKUP で一致したデータを取り出す
リスト B に関連データ(例:C 列の価格)がある場合、XLOOKUP は一致した項目ごとにその値を返します。
=XLOOKUP(A2,$B$2:$B,$C$2:$C,"見つかりません")
VLOOKUP も使えます。完全一致にするため、最後の引数は必ず FALSE にしてください。
=IFERROR(VLOOKUP(A2,$B$2:$C,2,FALSE),"見つかりません")
6. 2 つの列を行ごとに比較
リストが横に並んでいて、各行が隣と一致するかを知りたい場合:
=IF(A2=B2,"同じ","異なる")
= は大文字と小文字を区別しません。区別したい場合は EXACT を使います。
=IF(EXACT(A2,B2),"同じ","異なる")
異なる行に色を付けるには、A2:B を選択し、カスタム数式 =$A2<>$B2 で条件付き書式のルールを追加します。
7. 別々のシートにあるリストを比較
通常のセルでは、もう一方のシートを直接参照できます。
=IF(COUNTIF(シート2!$A$2:$A,A2)>0,"一致","不一致")
条件付き書式のルールでは別シートを直接参照 できない ため、範囲を INDIRECT で囲みます。
=COUNTIF(INDIRECT("シート2!A2:A"),$A2)>0
シート2 はご自身のシート名に置き換えてください。名前にスペースが含まれる場合は、単一引用符で囲みます:INDIRECT("'旧顧客'!A2:A")。
よくある問題と解決方法
- 余分なスペース: "Apple " と "Apple" は一致しません。データを選択して データ → データ クリーンアップ → 空白文字を削除 を使います。
- 同じリスト内の重複: 先に データ → データ クリーンアップ → 重複を削除 を使うか、結果を
UNIQUEで囲みます。 - 大文字と小文字: COUNTIF、MATCH、XLOOKUP、VLOOKUP は区別しません。大文字小文字を区別して存在を確認するには
=SUMPRODUCT(--EXACT($B$2:$B$100,A2))>0を使います。 - 数値と文字列: 数値と、同じ数字を文字列として保存したものは一致しません。表示形式 → 数字 で両方の列を同じ形式にするか、
=VALUE(A2)で変換します。
まとめ
| 方法 | 結果 | 向いている用途 |
|---|---|---|
| 条件付き書式(COUNTIF) | 一致・差分に色付け | すばやい目視確認 |
| COUNTIF / MATCH の補助列 | 一致 / 不一致の表示 | 並べ替えとフィルタ |
| ARRAYFORMULA | 列全体の判定 | 増え続けるリスト |
| FILTER(+ UNIQUE、SORT) | 一致・差分の自動更新リスト | 結果の抽出 |
| XLOOKUP / VLOOKUP | もう一方のリストの関連データ | 他の列も必要な照合 |
行ごとの比較(= / EXACT) |
行ごとに同じ / 異なる | 並びがそろった 2 列 |
| 条件付き書式での INDIRECT | シートをまたいだ強調表示 | 別タブにあるリスト |
Excel をお使いの場合は Excel で 2 つのリストを比較する方法 をご覧ください。数式なしで一度だけ確認したいなら、オンラインのリスト比較ツール が便利です。