VLOOKUP関数使っている時に、検索値が範囲の中に絶対あるはずなのに#N/Aになる!っていうことありませんか?
実はそれ検索値や範囲が数値に見えるのに、Excelは値として扱っている可能性があります。
例えば下の状態です。A6セルに「5」という数字があるからVLOOKUPの結果は「お」が返ってこないとオカシイです。
数値なのか文字列なのか
Excelって数値と文字列の取扱いがキチンと分けられているんです。上の例ではA列の数字を文字列で入力しました。文字列で入力するのは、先にセルの書式設定で表示形式を「文字列」に選択してから1と入力します。
通常、数字なのに文字列として扱われている場合、Excelは以下のように知らせてくれます。セルの左上に緑の三角形が出ます。これはこのセル間違い無いですか?大丈夫ですか?という印です。
セルを選択すると、どういう内容かメッセージが出てくる。今回は「数値が文字列として保存されています」です。
数値へ戻し方(エラーメッセージがある場合)
このメッセージの「数値に変換する(C)」を選ぶと自動的に数値に変換してくれ、VLOOKUPもエラーから元に戻ります。
複数行・列ある場合は複数行選択したうえで、「数値に変換する」をクリックすれば一気に直ります。
数値への戻し方(エラーメッセージが無い場合)
ややこしいのはエラーメッセージが消えている場合です。この場合先ほどの手法が出来ません。
セルの書式設定で数値に変えても、実はダメなんです。
これはセルの書式設定は表示形式を変更するだけで、セルの内容編集は行った事になっていないからです。ということはVLOOKUPで計算している範囲内も再計算されない為、文字列のままの認識です。
これではエラーが解消されません。
面倒くさいですが、いちいちセルを再編集する必要があります。
F2 → Enter → F2 → Enter の繰り返し
キーボードのF2を押すとセルの編集モードになります。そしてそのままEnterキーを押すと、再編集したことになりますので、数値として認識されます。
マクロで走らせる
もう一つの手法は、マクロでF2→Enterを繰り返しさせる方法です。
何万行という行数があれば手動でやるのは流石に大変なので、マクロで全セルを再編集させる事です。
再度エラーメッセージを表示させる
これが一番やりやすいです。
一回だけF2 → Enter を行い、その後に「元に戻す」をします。するとエラーメッセージを再度表示させる事が出来ます。
後は複数行選択し、「数値に変換する」をすれば一気に変換出来ます。
&で数値を結合させている場合
上の例では、ただ単純に入力時に文字列になってしまった場合です。それに対して、数式で文字列になってしまっている場合があります。
それは数値と数値を&で結合した場合です。
この場合もC列の結果は文字列として扱われます。検索値「15」はC6セルにあるので、VLOOKUPの結果は「お」になって欲しいですが、やはり#N/Aとなります。
この時は「数値が文字列として保存されています」メッセージが出ないのです。ただ、文字列なので標準だと左寄せになっているので、そこで気付けるかもしれません。
数値にする
文字列を数値に変換する関数があります。それはVALUE関数です。
そうすればC列の結果は数値として扱われるのでVLOOKUPが正常になります。
検索値を文字列にする
もしくは、C列の計算式が変更出来ないのであれば、検索値を文字列で検索すれば良いです。
この例ですと「15」を文字列にしてしまいます。関数はTEXT関数を使います。
2つ目の引数は表示形式を指定するところですので、文字列の場合 ”@” になります。
こうすればVLOOKUPはエラーになりません。