• ベストアンサー

excel関数について質問です。

excel関数について質問です。 2  4 りんご 8 13 みかん 20 27 ばなな 上のような表でVLOOKUP関数を用いて 「2」を検索して「りんご」を返すことが できると思います。 いま困っているのは 検索値が表の1列目と2列目の数値の範囲内にある場合に 3列目の値を返すことができないか ということです。 例えば、 「11」を検索して「みかん」を返したいと考えています。 VLOOKUPの応用で検索できるのか、 それともマクロを組む必要があるのでしょうか。 ご存知の方がいらっしゃったら教えてください。 どうぞよろしくお願い致します。

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

  • ベストアンサー
  • don9don9
  • ベストアンサー率47% (299/624)
回答No.3

>2  4 りんご >8 13 みかん >20 27 ばなな 例えばこれがA1:C3に入っていて、D1に検索したい値を入力するとします。 VLOOKUP関数は、4つ目の引数にTRUEを指定するか何も指定しない場合 検索値未満の最大値を表示するようになっています。 例えばA列の値は2,8,20ですが、ここで検索値に3を指定すると 2行目の8は3より大きいので、1行目の値を返します。 VLOOKUP関数の4つ目の引数を省略して2列目の値(4,13,27)を取得 これと検索値を比較して 2列目の値が検索値以下なら3列目の値(りんご、みかん、ばなな)を表示 そうでなければ(検索値の方が大きければ)何も表示しない という式にすれば可能かと思います。 具体的には以下のようになります。 =IF(D1<=VLOOKUP(D1,A1:C3,2),VLOOKUP(D1,A1:C3,3),"") エラー回避まで入れたら以下のような式になります。 =IF(ISNA(VLOOKUP(D1,A1:C3,2)),"",IF(D1<=VLOOKUP(D1,A1:C3,2),VLOOKUP(D1,A1:C3,3),""))

aomushi77
質問者

お礼

回答いただきありがとうございます! 丁寧な説明でとてもわかりやすかったです。 VLOOKUPで返した値と検索値を比較し、しかもその大小を IF文で分離するという表現方法に感動しました。 エラー回避の手法まで教えていただき、とてもうれしいです。 ありがとうございました!

その他の回答 (3)

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.4

一例です。 =INDEX(C:C,SUMPRODUCT((A1:A10<=キー)*(B1:B10>=キー)*ROW(A1:A10)))

aomushi77
質問者

お礼

回答いただきありがとうございます! INDEX関数に入力する行番号を、SUMPRODUCTを用いた複数条件の積で 表現するという美しさにほれぼれしてしまいました。 とても勉強になりました。 ありがとうございました!

  • kybo
  • ベストアンサー率53% (349/647)
回答No.2

1行目に見出しを追加し、DGET関数を使うのが一番簡単だと思います。 F2のセルには以下のように入力してあります。 =DGET(A1:C4,3,D1:E2) あと別の方法で、どうしても見出しを追加せずにしたい場合は、配列数式になります。 同じ表の場合、 =INDEX(C1:C10,MIN(IF((A1:A10=D1)*(B1:B10=E1),ROW(C1:C10),""))) のように入れ、CtrlキーとShiftキーを押しながらEnterキーで確定します。

aomushi77
質問者

お礼

回答いただきありがとうございます! DGET関数という抽出作業に便利なものがあるんですね。 数値一致だけでなく、うまくやれば範囲指定も行えそうです。 ありがとうございました。

  • myRange
  • ベストアンサー率71% (339/472)
回答No.1

  Vlookupの最後の引数(検索の型)に、Trueを設定してみたらどうなりますか?  =VLOOKUP(E1,A1:C3,3,TRUE) 以上です。  

aomushi77
質問者

お礼

早速のお返事、ありがとうございます! TRUEを使いこなすと、いろいろと応用できて検索の幅が広がるんですね。 VLOOKUPを使い始めたばかりなので、とても勉強になりました。 ありがとうございました。