Excelで2つの文字列が同じかどうかを比較したいときはないでしょうか。
けど、そんな中で悩むことは、
・大文字小文字や全角半角の違いで結果が変わるのが不安
・見た目は同じなのに不一致になる原因がわからない
ですよね。
今回はそんなお悩みを解決する
についてまとめます!
完成イメージ
2つのリストを照合するとき、「=(等号)」と「EXACT関数」では判定結果が変わります。
今回は
・大文字小文字を区別しない「=(等号)」
・区別する「EXACT関数」
・末尾の空白を無視するTRIM/CLEAN
・部分一致を調べるCOUNTIF/SEARCH
を使い分ける方法をゴールにします。

上の画像が完成形です。C列(等号)とD列(EXACT)とE列(判定)で、同じ文字列でも結果が変わるのがわかります。
なお、見た目は同じなのに不一致になるときの対処法(トラブルシュート)と、VBAで一括判定する方法もあわせてご紹介します。
もくじ
STEP1. 照合したい2つのリストを用意する
まずは比較したい2つのリストを用意します。
A列が「リストA」、B列が「リストB」で、商品コードを照合する想定です。
C列からE列は判定用に空けておきます。
データは10件で、あえて大文字小文字違い・全角半角違い・末尾に空白のあるペアを混ぜています。
この「同じに見えるのに違う」ペアを見つけるのが、今回のゴールです。

下の表をコピーして、Excelのシートに貼り付けるとそのまま試せます。
| リストA | リストB | 等号で比較 | EXACTで比較 | 判定 |
|---|---|---|---|---|
| ABC | ABC | |||
| ABC | abc | |||
| ITEM | ITEM | |||
| ITEM001 | ITEM001 | |||
| SKU-100 | SKU-100 | |||
| SKU-200 | SKU-200 | |||
| ab-300 | AB-300 | |||
| XYZ9 | XYZ9 | |||
| P-500 | P-500 | |||
| Code-77 | Code-77 |
※ 数式で求める列は空にしています。すでに値が入っている列はそのまま残して試せます。
STEP2. =(等号)で比較する
もっともカンタンなのが、=(等号)で比べる方法です。
C2セルに =A2=B2 と入力し、C11までコピーします。
結果は TRUE / FALSE で返ります。
ここで注目したいのが、3行目の「ABC」と「abc」が TRUE(一致)になっている点です。
=(等号)は大文字小文字を区別しません。
「だいたい同じかどうか」を確認するだけなら、これで十分です。

STEP3. EXACT関数で比較する
次はEXACT関数を使ってみます。
EXACTは大文字小文字を区別して、2つの文字列が完全に同じかを判定します。
D2セルに =EXACT(A2,B2) と入力し、D11までコピーします。
実際の入力画面がこちらです。
数式バーに数式が表示され、引数のヒントも確認できます。

STEP4. 「=」と「EXACT」の結果を比べる
D列にEXACTの結果が入りました。
C列(=)と見比べてみましょう。
3行目の「ABC」と「abc」は、C列が TRUE でも D列は FALSE になっています。
これが大文字小文字の違いです。
=(等号)は同じ文字とみなし、EXACTは別の文字とみなします。
8行目の「ab-300」と「AB-300」も同じく、C列は TRUE、D列は FALSE です。
「大文字と小文字を別物として照合したい」ときはEXACTを使ってください。

STEP5. 全角と半角の違いはどうなる?
次は全角と半角の違いです。
4行目は「ITEM(全角)」と「ITEM(半角)」、9行目は「XYZ9(全角)」と「XYZ9(半角)」です。
この2つの行は、C列(=)もD列(EXACT)も FALSE になっています。
つまり全角と半角は、=(等号)でも別の文字として扱われるのです。
ここが大文字小文字との大きな違いです。
=(等号)が区別しないのは大文字小文字だけで、全角半角は区別される点を覚えておきましょう。

STEP6. 末尾の空白を無視したい(TRIM・CLEAN)
ここで見た目は同じなのに不一致になる、よくある原因を確認します。
6行目と11行目のB列には、末尾に半角スペースが1つ入っています。
見た目ではほとんどわかりませんが、これだけで不一致と判定されてしまいます。
表の下に、文字数を数えるLEN関数を用意しました。
同じ「SKU-100」でも、A6は7文字、B6は8文字になっています。
末尾の余分な空白を取り除くには、TRIM関数を使います。
E2セルに =IF(EXACT(TRIM(A2),TRIM(B2)),”一致”,”不一致”) と入力します。

STEP7. 判定列をIF関数で作る
先ほどのTRIMを組み込んだ数式を、E2からE11までコピーします。
=IF(EXACT(TRIM(A2),TRIM(B2)),"一致","不一致")
すると、6行目と11行目が「不一致」から「一致」に変わりました。
末尾の空白が取り除かれたためです。
一方、大文字小文字違いと全角半角違いの行は「不一致」のままです。
TRIMが取り除けるのは空白だけで、大文字小文字や全角半角は直しません。
「空白だけ無視して、それ以外は厳密に比べたい」ときにぴったりの数式です。

STEP8. 部分一致を調べたい(COUNTIF・SEARCH)
ここまでは「完全一致」の比較でした。
「この文字を含む行はあるか」といった部分一致を調べたいときは、COUNTIF関数やSEARCH関数を使います。
表の下に、確認用の小さな表を用意しました。
=COUNTIF($B$2:$B$11,”*”&A21&”*”) で、B列にその文字を含む件数を数えられます。
=IFERROR(SEARCH(A21,$B$5),”なし”) で、何文字目に含まれるかを調べられます。
ワイルドカードの * は「0文字以上の任意の文字」を表します。
「ITEM」は2件、「ABC」も大文字小文字を区別しないので2件ヒットします。
「zzz」は見つからず、SEARCHは「なし」を返します。
部分一致も、完全一致と同じく大文字小文字は区別しません。

目的別の使い分け(比較表)
ここまでの内容を、目的別に整理しました。
| 方法 | 大文字小文字 | 全角半角 | 向いている場面 |
|---|---|---|---|
| =(等号) | 区別しない | 区別する | ざっくり同じか調べたいとき |
| EXACT関数 | 区別する | 区別する | 厳密に一致を判定したいとき |
| COUNTIF関数 | 区別しない | 区別する | 含む件数を数えたいとき |
| SEARCH関数 | 区別しない | 区別する | 含まれる位置を調べたいとき |
大文字小文字を区別しないなら =(等号) や COUNTIF・SEARCH。
区別して厳密に判定したいなら EXACT関数がおすすめです。
末尾の空白が気になるときは、=EXACT(TRIM(A2),TRIM(B2)) のようにTRIMを組み合わせましょう。
VBAで一括判定する
件数が多く、毎回手で数式を入れるのが面倒なときは、VBAで一括判定するのがラクです。
Alt+F11でVBAエディターを開き、標準モジュールに次のコードを貼り付けます。
Sub CompareStrings()
Dim r As Long, a As String, b As String
For r = 2 To 11
a = Cells(r, 1).Value
b = Cells(r, 2).Value
' vbBinaryCompare=大文字小文字を区別 / vbTextCompare=区別しない
If StrComp(a, b, vbBinaryCompare) = 0 Then
Cells(r, 5).Value = "一致"
Else
Cells(r, 5).Value = "不一致"
End If
Next r
End Sub
StrComp関数の3つめの引数で、比較方法を切り替えられます。
vbBinaryCompare は大文字小文字を区別し、vbTextCompare は区別しません。
実行すると、E列に判定が一気に入ります。
ボタンに登録しておけば、クリック1つで照合できます。
ワークシートの=(等号)とは逆なので、ここは少し注意が必要です。
区別したくないときは vbTextCompare を指定してくださいね。
うまくいかないときの対処法(トラブルシュート)
実際に試すと、思ったようにいかないこともあるかもしれません。
よくあるつまずきと対処法をまとめました。
| 症状 | 原因 | 対処 |
|---|---|---|
| 見た目は同じなのに不一致になる | 先頭や末尾に空白が入っている/全角半角が混在している | =EXACT(TRIM(A2),TRIM(B2)) にする/=LEN() で文字数を確認する |
| 数値と文字列が一致しない | 片方が数値、もう片方が文字列で入力されている | どちらかに型を揃える/=EXACT(TEXT(A2,”@”),B2) のようにする |
| TRUE/FALSEが文字として出る | 数式が文字列として入力されている | セルの表示形式を標準に戻す/数式を入力し直す |
| 大文字小文字を無視したい | EXACTは大文字小文字を区別する | =(等号)を使う/UPPER・LOWERで揃えてから比較する |
| 消えない空白が残る | 改行やタブなど見えない文字が入っている | CLEAN関数で取り除く/=EXACT(TRIM(CLEAN(A2)),TRIM(CLEAN(B2))) |
関数の説明
今回使った3つの関数の概要です。
書式と役割を押さえておきましょう。
EXACT関数(イグザクト)
| 書式 | =EXACT(文字列1, 文字列2) |
|---|---|
| できること | 2つの文字列が完全に同じかを判定します。大文字小文字を区別します。 |
| 戻り値 | 一致なら TRUE、不一致なら FALSE |
| こんなときに | 「大文字と小文字を別物として」厳密に照合したいとき。 |
| 注意 | 全角と半角も区別します。末尾の空白もそのまま比較されます。 |
=EXACT(A2, B2)
TRIM関数(トリム)
| 書式 | =TRIM(文字列) |
|---|---|
| できること | 文字列の前後の空白を取り除きます。単語の間の余分な空白も1つにまとめます。 |
| 戻り値 | 空白を取り除いた文字列 |
| こんなときに | 見た目は同じなのに不一致になるときの、原因確認と解消に。 |
| 注意 | 全角スペースは取り除けません。大文字小文字や全角半角も直しません。 |
=EXACT(TRIM(A2), TRIM(B2))
CLEAN関数(クリーン)
| 書式 | =CLEAN(文字列) |
|---|---|
| できること | 文字列から印刷できない文字(改行・タブなど)を取り除きます。 |
| 戻り値 | 制御文字を取り除いた文字列 |
| こんなときに | 他システムから取り込んだデータに、見えない改行コードが混ざっているとき。 |
| 注意 | 空白(スペース)は取り除けません。空白はTRIMと組み合わせます。 |
=EXACT(TRIM(CLEAN(A2)), TRIM(CLEAN(B2)))
完成
2つのリストを、=(等号)・EXACT・IF+TRIMで照合できました。
同じ文字列でも、「=」なら一致、「EXACT」なら不一致になる行があることを確認できました。
末尾の空白もTRIMで解消できています。
思ったとおりに動きましたか?
目的に合わせて関数を使い分ければ、照合作業がぐっとラクになります。

さいごに
いかがでしょうか。
今回は、
についてまとめました。
まずは今回のサンプル表で、ぜひ一度試してみてください。
大文字小文字・全角半角・末尾の空白、この3つを押さえるだけで、照合ミスがぐっと減りますよ。
また、他にも便利なExcelの時短テクニックがありますので、よろしければご参照頂ければと思います。
ぜひ試してみてください。










コメントを残す