VBAでXLOOKUP関数を使っているのに「該当する値が存在するはずなのに“該当なし”が返る」という現象は、特に複数条件検索を組み合わせた場合によく発生します。本記事では、その原因とコード上の落とし穴、そして正しい書き方の考え方を整理して解説します。
XLOOKUPで「該当なし」になる基本的な仕組み
XLOOKUPは、検索値と完全一致するデータが見つからない場合に、既定値として「該当なし」を返します。
例えば見た目上は同じ文字列でも、空白やデータ型の違いがあると一致しません。
そのため「存在するのに見つからない」現象が起こります。
今回のコードで起きている本質的な問題
提示されているコードでは、複数列を結合して検索キーを作成しています。
例えば targetValue & targetValueY のように連結している場合、実データ側も完全に同じ形で連結されていないと一致しません。
このわずかなズレが「該当なし」の原因になります。
Evaluateを使った範囲結合の注意点
Application.Evaluateで lookupRange1.Address & “&” & lookupRange2.Address のように結合すると、見た目は正しくても内部的な配列一致が崩れることがあります。
例えばセル参照の順序やデータ型が異なると、XLOOKUPは一致判定できません。
特に文字列と数値の混在には注意が必要です。
よくある原因① データ型の不一致
検索値が文字列なのに、参照範囲が数値になっているケースは非常に多いです。
例えば「001」と「1」は見た目が似ていても一致しません。
この場合はTEXT関数や型変換が必要になります。
よくある原因② 余分な空白や不可視文字
セル内にスペースや改行が含まれていると一致しません。
例えばCSV取り込みデータでは末尾スペースが混入することがあります。
TRIM関数やCLEAN関数で整形する必要があります。
よくある原因③ 配列結合のズレ
複数条件検索のための結合キーが片方だけ違う形式になっていると一致しません。
例えば片方は “A1B1″、もう片方は “A1 B1” のような違いです。
見た目では気づきにくいのが特徴です。
改善方法の基本方針
まずは検索キーと参照データを完全に同じ形式に揃えることが重要です。
例えば両方ともTEXT関数で統一したり、区切り文字を明示的に入れる方法があります。
また可能であれば補助列を使う方が安定します。
まとめ
「該当する値があるのに該当なしになる」原因の多くはデータの見た目ではなく内部表現の不一致です。
特に複数条件検索では、結合ルールのわずかなズレが致命的になります。
まずはデータ型・空白・結合形式の3点を重点的に確認することが解決の近道です。


コメント