概要
「“山田太郎”と“山田太朗”は似ていると判定したい」
「“アイウエオ”と“アイウエオ”を“ほぼ同じ”とみなしたい」
「綴りミスっぽいものを自動で拾いたい」
こういう “類似文字列(あいまい一致・似ているかどうか)” を判定する機能は、
Excel の標準関数には 存在しません。
VLOOKUP の近似一致や、=・EXACT・SEARCH などは
「同じ」「含まれている」までしか判定できず、
「どれくらい似ているか」「1文字違いならOK」 といった
“類似度”そのものを返す関数はない、という前提からスタートする必要があります。
ここでは、
- なぜ「関数だけでの類似判定」は不可なのか
- それでも Excel で“似ていそうなもの”を探すための現実的な工夫
を、初心者向けにかみ砕いて解説します。
Excelで「類似文字列判定」が関数だけではできない理由
本当に欲しいのは“距離”や“スコア”
類似判定でやりたいことは、本当はこうです。
- まったく同じ → 類似度 100%
- 1文字違う → 類似度 80%
- 並びが少し違う → 類似度 60%
- 全然違う → 類似度 0%
この「どのくらい違うか」を数値化するために、
プログラミングの世界では
- レーベンシュタイン距離
- 編集距離
- Jaro-Winkler
- N-gram など
といった 文字列距離アルゴリズム が使われます。
しかし、Excel の標準関数群には、
これらのアルゴリズムを実装した関数はありません。
Excel関数ができるのは「完全一致/部分一致」まで
文字列比較に関して、Excel 関数でできる代表的なことは以下のようなものです。
=A1=B1
→ 完全一致(大小無視)=EXACT(A1,B1)
→ 完全一致(大小区別)=ISNUMBER(SEARCH(B1,A1))
→ A1 の中に B1 が“含まれているか”=LEFT(A1,2)=LEFT(B1,2)
→ 先頭 2 文字だけ同じかどうか
どれも「同じかどうか」「含まれているか」という判定であり、
“似ているかどうか”の度合い を返すものではありません。
Excel内で「なんとか似たものを探す」ための現実的テクニック
※ここからは「厳密な類似度」ではなく、
「あくまで“それっぽいものを探すための工夫”」です。
先頭・末尾・部分を使った“ゆるいチェック”
例えば、「先頭 3 文字が同じものは“似ている候補”として扱う」
といった割り切りをする方法があります。
例:A列とB列の名前が「先頭3文字だけ」同じかどうかを判定
=LEFT(A2,3)=LEFT(B2,3)
TRUE → 先頭3文字は同じ → 似ている可能性が高い
FALSE → 先頭から違う → 別人の可能性が高い
もちろんこれで完全ではありませんが、
「候補を絞り込む」という意味では実務的に役立つことがあります。
曖昧な部分一致で“候補を拾う”
たとえば「“山田”を含む名前」を探したい場合、
SEARCH を使って 部分一致候補 を拾うことができます。
=ISNUMBER(SEARCH("山田",A2))
TRUE の行だけフィルタで抽出する、という使い方です。
これは「似ている」ではなく「含んでいる」ですが、
名字やキーワードベースで候補を出すには現実的です。
TRIM・CLEAN・置換で“差を小さくしてから比較”する
類似とまではいかなくても、
- 全角・半角の違い
- 余計なスペース
- 不可視文字
- 一部記号の違い
のような“見た目上の揺れ”を吸収した上で= や EXACT で比較する、という方針もあります。
例:全角英数字を半角に変換してから比較(手動 or 他の機能併用)
- CLEAN や TRIM でゴミを落とす
- 「全角 ⇔ 半角変換」は Excel 関数では難しいので、
・別途置換や Power Query を使う
・関数だけに限定しない運用ルールにする
こうして “揺れを軽減した上での完全一致比較” をするのが、
Excel 関数だけで現実的にできる最大限の対応に近いです。
「類似文字列判定」をやりたいときの発想の切り替え
1. Excel関数だけで完結させようとしない
本格的な類似度判定(1文字違いを検出、タイプミスを特定など)は、
正直なところ Excel 関数だけに任せる領域ではありません。
- Power Query
- VBA(ユーザー定義関数)
- Python やその他の外部ツール
- 専用の重複チェックツール
などと連携してしまった方が、
精度・メンテナンス性ともに現実的です。
2. Excel関数では「候補リストを絞る役」と割り切る
Excel 関数に任せるのは、
- 部分一致(SEARCH)で候補を拾う
- 先頭×文字一致・末尾×文字一致
- TRIM/CLEAN などで揺れを減らす
- それでも同じものだけを
=で判定
といった “前処理・候補絞り込み” の部分まで、と割り切ると、
役割がはっきりしてストレスが減ります。
まとめ:Excel関数での類似判定は「不可」と割り切る
- Excelに「類似度」を計算する関数はない
- EXACT や
=は「完全一致」しか見てくれない - SEARCH や LEFT などの組み合わせで「それっぽく絞る」ことはできるが、
本当の意味での 類似文字列判定 とは別物
実務では、
- 関数では“候補拾い”まで
- 本気の類似判定は 別ツール or 手作業チェック
という分担にするのが現実的です。
問題1
A2 と B2 の文字列が「完全一致」しているかどうかを、
TRUE / FALSE で判定したいです。
大小は区別しなくて構いません。
= を使った式を書いてください。
=A2=B2
問題2
A2 と B2 の文字列が
「先頭2文字だけ同じかどうか」を判定したいです。
TRUE / FALSE を返す式を書いてください。
=LEFT(A2,2)=LEFT(B2,2)
問題3
A2 の文字列の中に「山田」という文字が含まれているときに TRUE を返したいです。
部分一致(含まれるかどうか)を判定する式を書いてください。
=ISNUMBER(SEARCH("山田",A2))
問題4
A2 と B2 を比較するとき、
余計なスペースや不可視文字をできるだけ取り除いてから、完全一致比較したいです。
TRIM と CLEAN を使って比較する式を書いてください。
=TRIM(CLEAN(A2))=TRIM(CLEAN(B2))
問題5
次の要件を満たす「ゆるい一致判定」をしたいです。
- A2 と B2 の先頭3文字が同じ
- かつ、大文字・小文字は無視したい
TRUE / FALSE を返す式を、LOWER と LEFT を使って書いてください。
=LEFT(LOWER(A2),3)=LEFT(LOWER(B2),3)
Excel 関数だけで「類似文字列判定」を完璧にこなすことはできません。
だからこそ、「どこまでを関数でやるか」「どこからは別手段に任せるか」を決めておくことが、
現場で Excel をストレスなく使いこなすうえで、とても大事になってきます。
