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に、同じ数字が来た場合)、行番号の大きいデータの優先が出来ればなお助かります。


ご返答何卒、よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (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を考えています。
ABCD
38012
21003
41032
58015
68536
19067
49929
21025
すると5(D9の値)が取れます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/10/19 10:47

こんばんは



たとえば
  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列から値を返します
    • good
    • 0

>最小から2番目のもの



=VLOOKUP(SMALL(A1:A4,2),A1:C4,3,0)

"SMALL(範囲,順位)"は指定された範囲の中の小さい方から数えた順位に対応する値を返します。ちなみに大きい方から数える時には、"LARGE(範囲,順位)"です。

"MIN(範囲)"は"SMALL(範囲,1)"とも表せ、"MAX(範囲)"は"LARGE(範囲,1)"とも表せるわけです。

>同順位の場合(A:Aに、同じ数字が来た場合)、行番号の大きいデータの優先

わかりません。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング