• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセル関数式により、列の最後尾から2行目の値からの最大値の求め方。)

エクセル関数式により、列の最後尾から2行目の値からの最大値の求め方

このQ&Aのポイント
  • エクセルの関数式を使用して、列の最後尾から2行目の値からの最大値を求める方法について教えてください。
  • 以下の表の各列の空白、もしくは0の後にある値を最後尾とし、その値から2行目の値までを含む範囲から最大値を抜き出す関数式の方法を知りたいです。
  • 例えば、A列では8が最後尾となり、それから2行目の値である6までの範囲から最大値を抜き出す方法を教えてください。

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

  • ベストアンサー
回答No.2

なんだかこの話に聞き覚えがあると思ったら、質問番号5945963の方 ですね。 質問番号5945963では最後尾から2つ上の「値」を返すために、index 関数を使ってindex(範囲,最後尾から2つ上の行番号)という計算をし ました。今回はmax関数に入れる範囲を「4行目から最後尾から2つ上 の行まで」で生成したいのですから、そのまま応用が利くはずなん ですが。 最後尾から2つ上の行番号は large(index(row(A4:A200)*(A4:A200>0),0),3) でしたね。A4から始まる範囲なら行数は上の式から3引きますから、 たとえばoffset関数で offset(A4,0,0,large(index(row(A4:A200)*(A4:A200>0),0),3)-3) のようになります。これをmax関数に放り込むだけで行けると思いま すよ。

kei__2000
質問者

お礼

 前回お世話になりました。今回も回答いただき、ありがとうございます。

その他の回答 (3)

  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.4

A~E列はそれぞれ4行目からが数値データなんですね? わたしはこの手の複雑な関数は不得手なのでVBAでやってみました。 F1:J1にA~E列の対象範囲の最大値を転記します。 簡単ですので以下の手順をおためしください。 1.AltキーとF11キー同時に押し(以下Alt+F11キーと記述)て Visual Basic Editor を呼び出します。 2.Visual Basic Editor のメニューから「挿入」、「標準モジュール」で出てきたコードウィンド(右側の白い広い部分)に以下のコード(Sub~End Sub)をコピペします。 '********これより下********** Sub test01()   Dim i As Integer   Dim tg(1 To 5) As Range   Dim myAr(1 To 5) As Double   Dim myStr As String   For i = 1 To 5     Set tg(i) = Cells(Rows.Count, i).End(xlUp)     Do While tg(i).Value = 0       Set tg(i) = tg(i).Offset(-1)     Loop     myAr(i) = Application.Max(Range(Cells(4, i), tg(i).Offset(-2)))   Next i   For i = 1 To 5     myStr = myStr & vbNewLine & i & "列目:" & myAr(i)   Next i   Range("F1").Resize(, UBound(myAr)).Value = myAr()   MsgBox "F1:J1に転記しました。" & myStr End Sub '********これより上********** 3.Alt+F11キーでワークシートへもどります. 4.Alt+F8キーで出てきたマクロ名(test01)を選択して実行します。

kei__2000
質問者

お礼

 回答ありがとうございます。VBAでの処理は考えていませんでしたが、良い勉強をさせていただけました。ありがとうございます。

回答No.3

数値の入力された最後の行をCOUNT関数で出してみました。始まりは4行目に特定されていたようなので+3しています。また、最後の数値が0の場合を2回までと考えてネストを組んでいますので、それ以上0があるなら、さらに重ねて下さい。ただ、重ねる回数に制限がありますが、、、。 あと、B列、C列・・・の際、"A"のところを全て"B"などに変更して下さい。 =IF(INDIRECT("A"&COUNT(A4:A116)+3)>0,MAX(A4:INDIRECT("A"&COUNT(A4:A116)+1)),IF(INDIRECT("A"&COUNT(A4:A116)+2)>0,MAX(A4:INDIRECT("A"&COUNT(A4:A116))),IF(INDIRECT("A"&COUNT(A4:A116)+1)>0,MAX(A4:INDIRECT("A"&COUNT(A4:A116)-1)))))

kei__2000
質問者

お礼

 回答ありがとうございます。回答いただいたやり方でうまくできました。ありがとうございます。

  • ji-ba
  • ベストアンサー率35% (37/104)
回答No.1

1 列の最後尾を指定  2 1より前2列目を指定 3 2とA4列までを指定 4 3の間で最大値を検索 5 4を表示 以上の順番で関数を組み合わせればいいでしょう。

kei__2000
質問者

お礼

 回答ありがとうございます。おっしゃるとおりです。

関連するQ&A