• ベストアンサー

VLOOKUPでTEUEを指定した場合について

エクセルのVLOOKUP関数でTRUEを指定した場合についての質問です。 文字列を検索する場合は検索結果が正常に返されないことがあるのでしょうか? 添付の画像のように名前の横に数字があるリストを検索したところ、会田、上田を検索した結果は正常ですが、伊藤、遠藤、岡田はエラーになりました。また、たまたま検索範囲をずらしたら岡田も正常に返されました。なぜでしょう?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

VLOOKUPで、4番目の引数「検索の型」に「TRUE」を設定した場合、検索対象は「昇順」で並んでいる必要があります。 この場合の「昇順」は「文字1つ1つの漢字コード順」であり「読み」ではありません。読みが「あいだ」「いのうえ」「うえだ」「えんどう」「おかだ」であっても「順番通りに並んで居ない」のです。 なので、検索されるリストは、文字コード順に 伊藤 遠藤 岡田 会田 上田 の順で並んでいないといけません。 で、VLOOKUPで「#N/A」になっている理由は「会田が邪魔して探しているデータが見付からない」からです。 1番目の「会田」が「1」になるのは「上から見て言って一致する会田が一番最初にあるから」です。 2番目の「伊藤」が「#N/A」になるのは「上から見て言って伊藤より後ろにある筈の会田が一番最初にあるから」です。VLOOKUPは「順に並んでいる」のを想定しているので、伊藤より下にある筈の会田が現れた段階で、それ以降に伊藤は存在しない、つまり「伊藤は存在しない」と判断して、検索をやめ、#N/Aになります。 3番目の「上田」が「3」になるのは「上から見て言って、最初の会田は上田より上だから次を探す、次の伊藤も上田より上だから次を探す、次を探したら上田が見付かるから」です。 4番目の「遠藤」が「#N/A」になるのは「上から見て言って遠藤より後ろにある筈の会田が一番最初にあるから」です。VLOOKUPは「順に並んでいる」のを想定しているので、遠藤より下にある筈の会田が現れた段階で、それ以降に遠藤は存在しない、つまり「遠藤は存在しない」と判断して、検索をやめ、#N/Aになります。 5番目も、2番目や4番目がエラーになるのと同じ理由です。 >また、たまたま検索範囲をずらしたら岡田も正常に返されました。なぜでしょう? 今までは「下から4番目に無いといけない会田が一番上に居た」ので「会田より前にある筈の物を探したらエラー」になっていました。 しかし「2番目から見ていく(つまり会田を無視する)」と「今まで検索の邪魔をしていた会田が無い」ので、岡田が見付かるようになります。

newkim
質問者

お礼

ご回答ありがとうございました。よく理解できました。ちょっと多忙でお礼が遅くなり申し訳ありませんでした。

Powered by GRATICA

その他の回答 (3)

  • kkkkkm
  • ベストアンサー率66% (1721/2591)
回答No.3

回答No.2の補足です。 リストのデータを昇順に並び替え(並び替えのオプションで「ふりがなを使わない」にしてください)られたとしても リストの並び順は 伊藤 遠藤 岡田 会田 上田 になり上記の状態では正しく結果が表示されますが、もし岡田が削除された場合にはF列の岡田の値はその上の遠藤の値が表示されますから都合が悪いのではないでしょうか。

  • kkkkkm
  • ベストアンサー率66% (1721/2591)
回答No.2

文字列の検索でVLOOKUP関数のTRUEを指定するのは珍しいと思いますが、TRUEの場合は「検索値」を超えない最大値を一致した値とする近似一致でデータは昇順に並んでないと正しい結果は得られません。 FALSEの場合は完全一致なのでデータの並び順はバラバラでも大丈夫です。 TRUEでよく見るのは、1から100まではA、101から200まではBのようなパターンでAやBを取得したい場合です。 多分、範囲の位置を一行下げたことによって上記の条件に「岡田」がはまったのだと思います。

newkim
質問者

お礼

ご回答ありがとうございました。ちょっと多忙でお礼が遅くなり申し訳ありませんでした。

Powered by GRATICA
  • asciiz
  • ベストアンサー率70% (6803/9675)
回答No.1

VLOOKUP関数を使う場合、リストが昇順または降順に並んでいなければいけません。 ご質問の五名の場合、文字コード順に並べると「伊藤、遠藤、岡田、会田、上田」の順となります。 まずこの順にリストを並べなおしてください。 ↓ 伊藤 2 遠藤 4 岡田 5 会田 1 上田 3 その上で、「TRUE」を指定した検索は、「完全一致」のみを検索します。 このことは、リストに存在する値を検索するならば問題ないのですが、リストに存在しない値を検索したとき、違が出てきます。 例えば上記リストから、「山田」を検索すると、「TRUE」では一致するものが無いので「#N/A」になりますが、「FALSE」では「会田」以上「上田」未満なので「会田」行の値が返ることになります。 >たまたま検索範囲をずらしたら岡田も正常に返されました。 範囲をずらしたことにより、「昇順またはに並んでいるセル」が変わったので、検索できました。 でもまあ、たまたまです。 本来はきちんとリスト全体を昇順または降順に並べなければ、VLOOKUP関数は適用できないのです。

newkim
質問者

お礼

ご回答ありがとうございました。ちょっと多忙でお礼が遅くなり申し訳ありませんでした。

Powered by GRATICA

関連するQ&A