VBAのXLOOKUPで「該当なし」が返る原因とは?複数条件検索が失敗する典型パターンと解決法

Visual Basic

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点を重点的に確認することが解決の近道です。

コメント

タイトルとURLをコピーしました