Excel関数 逆引き集 | 類似文字列判定 → 不可(関数なし)

Excel
スポンサーリンク

概要

「“山田太郎”と“山田太朗”は似ていると判定したい」
「“アイウエオ”と“アイウエオ”を“ほぼ同じ”とみなしたい」
「綴りミスっぽいものを自動で拾いたい」

こういう “類似文字列(あいまい一致・似ているかどうか)” を判定する機能は、
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 他の機能併用)

  1. CLEAN や TRIM でゴミを落とす
  2. 「全角 ⇔ 半角変換」は 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 をストレスなく使いこなすうえで、とても大事になってきます。

Excel
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました