• 締切済み

エクセルで最大値の隣の隣の数値を返したい

お世話になります 使用はエクセル2003です。 シート1のA1~D35にぎっしり1~999のいづれかの数値が入っているとして、その中で最大値の右の隣の隣の数値をシート2に表示させたいのです。(たとえば最大値がA1にあればC1を返し、D5にあれば F5の値を返すということです。) 同じく2番目に大きい数の右の隣の隣の数値というふうに5番目まで 数値を出したいです。 IFとLARGEとOFFSETを組み合わせてやろうと思ったのですが うまくいきません。 よろしくお願いいたします

みんなの回答

  • kuri222
  • ベストアンサー率0% (0/0)
回答No.4

VBAによる解法ではだめでしょうか?

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

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)
回答No.2

こんにちは。 私は、関数はあまり得意ではありませんが、ちょっと考えてみました。 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)

a55b55c55d
質問者

お礼

ありがとうございます。 このとおりでいきました! 式の中身はこれから考えて見ます

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

因みにE1:D35に最大値が存在した場合を補足して下さい。

a55b55c55d
質問者

補足

申し訳ありません。説明不足でした。 A1~D35以外には数値は入っておらず、その他のセルには なんらかの文字列がはいっています。 なのでD35に最大値があった場合、F35の文字列を返す ということになります。 あくまで最大値を探すのはA1~D35の中からです

関連するQ&A