エンジニアのおともだちといえば、エクセルですよね。非常に良く使う機能、VLOOKUP関数ですけれども、ちゃんとやってるのになんかできない(イライラ)、ちゃんと表示されない(イライラ)、そんなイライラエンジニアの皆さんに私のエラー経験を踏まえて、原因をそれっぽくまとめておきますのでエラー解決の足しにでもしてください。
=VLOOKUP(検索値, 範囲, 列番号, ※検索型)
※True=最も近いデータ, False=完全一致
検索キー(値)の選定をそもそも間違えてる
中途半端に正しい値と間違った変な値が混在して抽出されたりしてませんか。それって、抽出したいデータがその検索値では特定できない…みたいなパターンではないか見直してみよう。
なんかさ、「学生番号」とか「顧客番号」とかみたいな漢字の並びを見ると脊髄反射で「あ、これがキーね」とか思っちゃったりするじゃないですか。それでそのままやって、出来なくてあれ?と混乱する。え、私だけ?
でも、よくよく考えてみると顧客番号だったら、顧客が商品を1種類しか買わないとは全然限らないわけだし。何が言いたいかって言うと、「このお客さんが(顧客番号)」「この日に(購入日)」「この商品を(商品番号)」注文した、くらいまで指定しないと「取引」って特定できないですよね。
必要な項目はそのデータシート次第ですが、実務で見かける大半のログや明細はデータベースの教科書に載っているような簡素なやつじゃなくて、謎のデータ項目がずらりずらりとひしめき合ってる場合が多いでしょう。検索値が1種類だけで、目的のデータが特定できる方が珍しくない?
抽出される値が変だったら、一度検索値を見直してみると何かに気付けるかもしれません。
#違う文字だと認識されてるパターン
目視だと気づきにくいものたち。
##① 空白が混在している
ッカ~~。最近の私はこれにまたハマってしまいました。空白。だって見えないんだもん。
「001」と「001□」(□は空白スペース)が別の値と認識されてしまい、一致の判定がなされないことが多々あります。
元のDBからデータを抜いてきたときに何かの拍子で、空白が入ったりする。
##② 半角と全角、小っちゃい文字、濁点半濁点
上記空白と同じパターン。半角と全角は別物と認識されます。さらに、半角空白と全角空白も混ざっていたりするともっとカオスですよね。
半角(もしくは全角)を確定させた作業列を作ってから、VLOOKUPかければ良いです。
=ASC(B1)
=JIS(B1)
あとはシステム上「ハットリ」さんが「ハツトリ」さんになって格納されていたりすると、これも一致判定されません。
「ナガノ」と「ナカ゛ノ」(濁点が1文字カウント)も不一致になります。
#表選択の引数が$絶対$参照になってない
VLOOKUP、2個目の引数で範囲を指定しますが、絶対参照にしてますか?
大半、一番上のセルに関数式を書いたら、あとは下までオートで式を入れるかと思います。絶対指定してないと、範囲もセルが1つずれるごとに一緒にズレちゃうから、おかしくなります。
=VLOOKUP(B4, $G$4:$J$20, 5, False)
# 「$」付け忘れ
=VLOOKUP(B4, G4:J20, 5, False)
# 「$」付けたけど足りない
=VLOOKUP(B4, $G4:$J20, 5, False)
検索範囲がずれ込んでいくと計算結果がおかしくなり、皆さんお馴染みの「#N/A!」が登場することでしょう(※範囲もその他も合っている上で、一致する値が存在しないために「#N/A!」が出ていることもあります。この場合はこれで正しいです。)。
#文字列と数値(表示形式の違い)
検索値は「数値」だけど検索範囲の値は「文字列」になっている、等の齟齬があるときも上手くいきません。
めんどくさいけど、両者の表示形式を揃えるか、問題なければ全部「標準」にしちゃうとかします。
以上