• ベストアンサー

エクセルのVLOOKUP関数

エクセル2003,2007,2010を使っています。 セルA1に「3Z」を、セルC1からC3にそれぞれ「X」,「Y」,「Z」を入力し、セルB1に「=VLOOKUP(A1,C1:C3,1,TRUE)」を入力すると、結果が「#N/A」になってしまいます。 なぜ、検索出来ないのでしょうか? また、セルC3を「3Z」にしても同じく結果が「#N/A」になるのに、さらにセルC2を「2Y」にすると結果が「3Z」となるのですがなぜでしょうか?

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

  • ベストアンサー
  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.2

LOOKUP系の関数やMATCH関数などで完全一致型以外の検索を行う場合は、該当するデータを探すときに二分検索を行います。 たとえば5つのデータが並んでいる場合は、その真ん中の3つ目のセルを最初に検索し、この値が検索値より大きいか小さいかによって(文字列の場合は文字コード順の大小になります)、小さければより後のデータの中間のセル(4番目のセル)を検索し、大きければ前のデータ(2番目のセル)を検索し、さらにこれらの値と検索値との大小を判定して移動する方向を決め、該当のセルを求める仕組みになっています。 今回のケースでは3つのデータですので、最初に真ん中のセルの大小を判定することになりますが、前者の2つのケースは真ん中のデータがいずれも検索値よりも大きいパターンになりますので1つ目のデータを検索することになりますが、これも検索値より大きいため、該当データがないことになります。 一方、最後のデータでは、真ん中のデータが検索値よりも小さいので、3つ目のデータを検索することになり、このデータが返されることになるわけです。 このような基準でデータの中から検索値を探してきますので、データを昇順(MATCH関数では降順もあり)に並べておく必要があるわけです(完全一致で検索する場合には並べ替えておく必要はありません)。

choshu5
質問者

お礼

理解できました。 ありがとうございました。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7941)
回答No.1

VLOOKUP関数の第4引数をTRUEにして計算させている場合、検索対象範囲(C1:C3)を正しく「昇順」に並べ替えておかないと、エラーや「保証されない結果」が計算されてしまいます。 ご質問で試されたいろいろな値を実際に「昇順」で並べ替えてみると、エクセル的には添付図右上段のような大小関係になります。 左上段のように昇順に揃っていないデータからでは、左下の計算例のように例えジャスト値であってもエラーで計算できなかったり、あるいは間違った計算結果になります。

choshu5
質問者

お礼

ありがとうございました