• ベストアンサー

Ms-Excelの関数について

Ms-Excelの関数について ---------------------- 90 6 6 10 0 3 80 1 2 99 2 9 ---------- =VLOOKUP(MIN(A1:A4),A1:C4,3,0)(←答えは3) ------------------------ このようになると思いますが、 最小ではなく、最小から2番目のもの(80の、行の答えである2)を選び出したいのですがどうすればいいでしょうか? よろしくお願いいたします。 また、もし、可能でしたら、同順位の場合(A:Aに、同じ数字が来た場合)、行番号の大きいデータの優先が出来ればなお助かります。 ご返答何卒、よろしくお願いいたします。

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

  • ベストアンサー
  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

私製関数を作って見ました。 VBEの標準モジュールに Function smalls(a As Range, b As Integer) Dim cl As Range x = Application.Small(a, b) For Each cl In a If cl.Value = x Then r = cl.Row End If Next smalls = r End Function を作ります。 b番目に小さい値のある行で、最下(後)の行の行番号を返します。下記例では9(行目)を返します。 お望みの値を出すセルに、下記の例の場合では =OFFSET($B$1,smalls(B2:B9,2)-1,2) といれます。 例データとしてA1:D9を考えています。 A B C D 3 80 1 2 2 10 0 3 4 10 3 2 5 80 1 5 6 85 3 6 1 90 6 7 4 99 2 9 2 10 2 5 すると5(D9の値)が取れます。

tihiro_t
質問者

お礼

>>みなさまへ 回答お寄せいただきありがとうございます。 関数、プログラミングについて無知なため全部は理解できていませんが、これを参考にしてテキストと照らし合わせながら作成していきたいと思います。ありがとうございました!!

その他の回答 (2)

  • comv
  • ベストアンサー率52% (322/612)
回答No.2

こんばんは たとえば   A B C 1 90 6 6 2 10 0 3 3 80 1 2 4 99 2 9 5 80 1 5 6 85 3 6 こんな表でA列 2番目に小さい値 80 に対して 一番大きな行(5行目)のC列の値を求める場合 =INDEX(B1:C6,SUMPRODUCT(MAX((SMALL(A1:A6,2)=A1:A6)*ROW(A1:A6))),2) 式中の 最後の2 を1にすると B列から値を返します

  • deadline
  • ベストアンサー率63% (1239/1943)
回答No.1

>最小から2番目のもの =VLOOKUP(SMALL(A1:A4,2),A1:C4,3,0) "SMALL(範囲,順位)"は指定された範囲の中の小さい方から数えた順位に対応する値を返します。ちなみに大きい方から数える時には、"LARGE(範囲,順位)"です。 "MIN(範囲)"は"SMALL(範囲,1)"とも表せ、"MAX(範囲)"は"LARGE(範囲,1)"とも表せるわけです。 >同順位の場合(A:Aに、同じ数字が来た場合)、行番号の大きいデータの優先 わかりません。

関連するQ&A

専門家に質問してみよう