Excel関数の中でも強力な検索機能を持つ「XLOOKUP」。VLOOKUPやINDEX/MATCHの後継として広く使われるようになったこの関数ですが、実は"完全一致"モードを指定していても、見た目が異なる文字列を一致と判定してしまうケースが存在します。
この記事では、XLOOKUPの一致判定に潜む落とし穴とその原因、そして対策方法について詳しく解説していきます。特に、全角と半角の混在やスペースの有無が影響するケースにフォーカスし、実際の検証結果も交えてご紹介します。
目次
✅ XLOOKUPの基本構文と一致モードの役割
XLOOKUP関数の基本構文は以下のとおりです:
=XLOOKUP(検索値, 検索範囲, 戻り範囲, [見つからない場合の値], [一致モード], [検索モード])
このうち、[一致モード]の引数で一致の方法を指定できます。完全一致を行いたい場合は「0」または「FALSE」を指定します。
=XLOOKUP("A001", A1:A10, B1:B10, "見つかりません", 0)
このように書けば、本来は検索値とまったく同一の文字列がある場合のみ一致と判定されるはずです。
・検証:見た目が違う文字列でも一致と判定される?
以下のようなデータを準備しました。
| A列 | B列 |
|---|---|
| A001 | 1 |
| A 0 0 1 | 2 |
| A 0 0 1 | 3 |
| A002 | 4 |
上記のA列には、「A001」と見た目が似ているが全角スペースや全角数字が混ざったデータが含まれています。
セルE2に以下の式を入力:
=XLOOKUP(A2, A1:A4, B1:B4, , 0)
この式は、"完全一致"モードで検索するものです。しかし、A2には全角の"0"やスペースが含まれているため、A1とは異なるはずです。
それにも関わらず、結果は「1」と返され、A1と一致したと判定されてしまいました。
・EXACT関数での比較結果
EXACT関数を使ってA1とA2の文字列を比較してみます:
=EXACT(A1, A2)
この結果は FALSE。つまり、Excel上ではA1とA2は異なる文字列であると正しく判断されています。
にもかかわらず、XLOOKUPでは一致と判定されたというのは、極めて問題のある挙動です。
✅ なぜこのような挙動が起きるのか?
この原因は、XLOOKUPが内部的に文字列を正規化(ノーマライズ)して比較している可能性があることにあります。
例えば、
- 全角の"0"は、Unicodeで65296
- 半角の"0"は、Unicodeで48
当然ながら異なる文字コードですが、XLOOKUPはこれらを一部無視して近似文字と見なす場合があるのです。
また、セル内に含まれるスペースが全角スペースや非表示の特殊スペース(U+00A0など)だった場合、XLOOKUPではそれを無視して判定してしまうこともあります。
これはExcelの"使いやすさ"を追求した結果とも言えますが、厳密なデータ比較が必要な場面では危険な動作です。
対策1:一致モードを常に明示する
XLOOKUPでは[一致モード]を省略すると、自動的に「完全一致または次に小さい項目」として動作する可能性があります。これを防ぐために、常に一致モードを明示的に設定しましょう:
=XLOOKUP(A2, A1:A4, B1:B4, "見つかりません", 0)
ただし、今回のように一致モードが0でも一致してしまうケースもあるため、さらに強化が必要です。
対策2:文字列を正規化して比較する
ASC関数(全角→半角変換)や JIS関数(半角→全角変換)を使って、文字列の形式を統一してから比較します。
=XLOOKUP(ASC(A2), ASC(A1:A4), B1:B4, "見つかりません", 0)
もしくは、空白や非表示文字を取り除くために、TRIMやCLEAN関数も併用します:
=XLOOKUP(ASC(TRIM(CLEAN(A2))), ASC(TRIM(CLEAN(A1:A4))), B1:B4, "見つかりません", 0)
このようにすれば、意図しない一致判定を防げます。
■ 実務での注意点とおすすめの運用
- 外部データを取り込むときは、全角・半角、スペースの混入に注意
- ユーザーが手入力する場面では、文字の揺らぎを前提として検証処理を行う
- XLOOKUPを多用する場合は、補助列でデータを正規化した上で参照する運用を徹底しましょう
■ まとめ
XLOOKUPは便利な関数ですが、完全一致モードを使用していても文字列が一致と判定されてしまうことがあります。
その原因は、全角・半角やスペースの違いを無視した内部処理によるものであり、厳密な一致が必要な場面では正規化処理を加えることが不可欠です。
Excelの使いやすさの裏には、このような見えにくい落とし穴もあることを理解し、しっかりと対策を取りましょう。