- 締切済み
エクセルで最大値の隣の隣の数値を返したい
お世話になります 使用はエクセル2003です。 シート1のA1~D35にぎっしり1~999のいづれかの数値が入っているとして、その中で最大値の右の隣の隣の数値をシート2に表示させたいのです。(たとえば最大値がA1にあればC1を返し、D5にあれば F5の値を返すということです。) 同じく2番目に大きい数の右の隣の隣の数値というふうに5番目まで 数値を出したいです。 IFとLARGEとOFFSETを組み合わせてやろうと思ったのですが うまくいきません。 よろしくお願いいたします
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- kuri222
- ベストアンサー率0% (0/0)
VBAによる解法ではだめでしょうか?
- mu2011
- ベストアンサー率38% (1910/4994)
NO1です。 一例です。 sheet2の任意セルに設定、下方向に5行分コピーして下さい。 =OFFSET(Sheet1!$A$1,SUMPRODUCT((Sheet1!$A$1:$D$35=LARGE(Sheet1!$A$1:$D$35,ROW(A1)))*(ROW(Sheet1!$A$1:$D$35)))-1,SUMPRODUCT((Sheet1!$A$1:$D$35=LARGE(Sheet1!$A$1:$D$35,ROW(A1)))*(COLUMN(Sheet1!$A$1:$D$35)))+1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 私は、関数はあまり得意ではありませんが、ちょっと考えてみました。 Sheet2 に貼り付けて、必要なだけドラッグ・コピーしてみてください。 ただ、あまり範囲が大きい場合は、延べセル数が限界を超えますから、動きが鈍くなります。その場合は、VBA によるユーザー定義関数のほうが楽に出せるはずです。(むろん、数式をばらして使えば、楽に出せるはずです。) =OFFSET(Sheet1!$A$1,MAX(INDEX((Sheet1!$A$1:$D$35=LARGE(Sheet1!$A$1:$D$35,ROW(A1)))*ROW($A$1:$D$35),,))-1,MAX(INDEX((Sheet1!$A$1:$D$35=LARGE(Sheet1!$A$1:$D$35,ROW(A1)))*COLUMN($A$1:$D$35),,))+1)
- mu2011
- ベストアンサー率38% (1910/4994)
因みにE1:D35に最大値が存在した場合を補足して下さい。
補足
申し訳ありません。説明不足でした。 A1~D35以外には数値は入っておらず、その他のセルには なんらかの文字列がはいっています。 なのでD35に最大値があった場合、F35の文字列を返す ということになります。 あくまで最大値を探すのはA1~D35の中からです
お礼
ありがとうございます。 このとおりでいきました! 式の中身はこれから考えて見ます