Excelで文字列を比較する方法!EXACT関数と比較演算子の使い分け

Excelで文字列を比較する方法!EXACT関数と比較演算子の使い分け
Excelで2つの文字列が同じかどうかを比較したいときはないでしょうか。

けど、そんな中で悩むことは、

・「=(等号)」と「EXACT関数」の違いがわからない
・大文字小文字や全角半角の違いで結果が変わるのが不安
・見た目は同じなのに不一致になる原因がわからない

ですよね。

今回はそんなお悩みを解決する

・Excelで文字列を比較する方法(=(等号)とEXACT関数の使い分け)

についてまとめます!

完成イメージ

2つのリストを照合するとき、「=(等号)」と「EXACT関数」では判定結果が変わります。
今回は
・大文字小文字を区別しない「=(等号)」
・区別する「EXACT関数」
・末尾の空白を無視するTRIM/CLEAN
・部分一致を調べるCOUNTIF/SEARCH
を使い分ける方法をゴールにします。

完成イメージ
上の画像が完成形です。C列(等号)とD列(EXACT)とE列(判定)で、同じ文字列でも結果が変わるのがわかります。

なお、見た目は同じなのに不一致になるときの対処法(トラブルシュート)と、VBAで一括判定する方法もあわせてご紹介します。

STEP1. 照合したい2つのリストを用意する

まずは比較したい2つのリストを用意します。
A列が「リストA」、B列が「リストB」で、商品コードを照合する想定です。
C列からE列は判定用に空けておきます。
データは10件で、あえて大文字小文字違い・全角半角違い・末尾に空白のあるペアを混ぜています。
この「同じに見えるのに違う」ペアを見つけるのが、今回のゴールです。
照合する2つのリスト

下の表をコピーして、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までコピーします。
実際の入力画面がこちらです。
数式バーに数式が表示され、引数のヒントも確認できます。
EXACT関数の入力画面

STEP4. 「=」と「EXACT」の結果を比べる

D列にEXACTの結果が入りました。
C列(=)と見比べてみましょう。
3行目の「ABC」と「abc」は、C列が TRUE でも D列は FALSE になっています。
これが大文字小文字の違いです。
=(等号)は同じ文字とみなし、EXACTは別の文字とみなします。
8行目の「ab-300」と「AB-300」も同じく、C列は TRUE、D列は FALSE です。
「大文字と小文字を別物として照合したい」ときはEXACTを使ってください。
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)),”一致”,”不一致”) と入力します。
TRIM関数の入力画面

STEP7. 判定列をIF関数で作る

先ほどのTRIMを組み込んだ数式を、E2からE11までコピーします。

=IF(EXACT(TRIM(A2),TRIM(B2)),"一致","不一致")

すると、6行目と11行目が「不一致」から「一致」に変わりました。
末尾の空白が取り除かれたためです。
一方、大文字小文字違いと全角半角違いの行は「不一致」のままです。
TRIMが取り除けるのは空白だけで、大文字小文字や全角半角は直しません。
「空白だけ無視して、それ以外は厳密に比べたい」ときにぴったりの数式です。
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は「なし」を返します。
部分一致も、完全一致と同じく大文字小文字は区別しません。
COUNTIFとSEARCHで部分一致を調べる

目的別の使い分け(比較表)

ここまでの内容を、目的別に整理しました。

方法 大文字小文字 全角半角 向いている場面
=(等号) 区別しない 区別する ざっくり同じか調べたいとき
EXACT関数 区別する 区別する 厳密に一致を判定したいとき
COUNTIF関数 区別しない 区別する 含む件数を数えたいとき
SEARCH関数 区別しない 区別する 含まれる位置を調べたいとき
POINT

大文字小文字を区別しないなら =(等号) や 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つで照合できます。

タカヒロ

タカヒロ
VBAの = は、既定では大文字小文字を区別します。
ワークシートの=(等号)とは逆なので、ここは少し注意が必要です。
区別したくないときは 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で解消できています。
思ったとおりに動きましたか?
目的に合わせて関数を使い分ければ、照合作業がぐっとラクになります。
2つのリストを照合した完成表

さいごに

いかがでしょうか。

今回は、

・Excelで文字列を比較する方法(=(等号)とEXACT関数の使い分け)

についてまとめました。

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

ぜひ試してみてください。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。






コメントを残す

メールアドレスが公開されることはありません。 ※ が付いている欄は必須項目です

CAPTCHA ImageChange Image