[[20221225205708]] 『特定の領域の最大値を上から検出しその隣にある値』(すず) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『特定の領域の最大値を上から検出しその隣にある値を取りたい』(すず)

特定の領域の最大値を上から検出しその隣にある値を取りたいです。
具体的には、以下例で上からA列の行の0に到達するまでの範囲で最大値を検索し、その最大値と隣のB列にある値を取得しC列に表示したいです。
複数の関数を組み合わせる必要があるかと思いましたがなかなかできず、どなたかヘルプいただけないでしょうか。
宜しくお願い致します。

例)
データ
NA,A,B,C(←列名)
1,0,A12,最大値1,その隣の値1
2,2,Q52,最大値2,その隣の値2
3,3,A56,最大値3,その隣の値3
4,6,L13
5,1,K09
6,0,B27
7,3,P64
8,9,W98
9,2,J01
10,7,B67
11,0,M55
12,2,A10
13,2,B98
14,3,T24
15,0,C65
(↑行番号)

最大値1=6,その隣の値1=L13
最大値2=9,その隣の値2=W98
最大値3=3,その隣の値3=T24

< 使用 Excel:unknown、使用 OS:unknown >


回答では有りませんで、済みません
0.まずは、エクセルのバージョンと、OSのバージョン情報は
  ご記入ください。色々と使えるツールが変わってまいります。
1.最初のゼロは無視するのでしょうか。
2.実際のデーターは下記でいいですか
シート名 Sheet1
     |[A]|[B]
 [1] |  0|A12
 [2] |  2|Q52
 [3] |  3|A56
 [4] |  6|L13
 [5] |  1|K09
 [6] |  0|B27
 [7] |  3|P64
 [8] |  9|W98
 [9] |  2|J01
 [10]|  7|B67
 [11]|  0|M55
 [12]|  2|A10
 [13]|  2|B98
 [14]|  3|T24
 [15]|  0|C65
↑、相違点が有りましたらご指摘頂きますと、アドバイスが
有るかもしれません。。。←多分。^^;
私は関数は不得手なので引き続き他の、回答者様のアドバイスを
お待ちくださいませ。←vbaでしたら、お手伝い出来
るかもしれませんが。。。←かなり、あやしいぃ。(#^^#)
でわ
m(__)m

(隠居Z) 2022/12/26(月) 08:15:49


↑ 1. は解りました、済みません
m(__)m
(隠居Z) 2022/12/26(月) 08:18:27

 作業列を使う方法。
 E列を差行列とする場合。
 E1セルに
 =IFERROR(AGGREGATE(15,6,ROW($1:$100)/((A$1:A$100=0)*(A$1:A$100<>"")),ROW(A1)),"")
 と入力して下へフィルコピー。

 C1セルに
 =IFERROR(MAX(INDEX(A:A,E1+1):INDEX(A:A,E2-1)),"")
 D1セルに
 =IF(C1="","",VLOOKUP(C1,INDEX(A:A,E1):INDEX(B:B,E2),2,FALSE))
 と入力してそれぞれ下へフィルコピー、ではどうだろうか?
(ねむねむ) 2022/12/26(月) 09:17:17

 あっ、上記式は元データが最大100行目までの場合。
(ねむねむ) 2022/12/26(月) 09:20:27

 おっと最大値なのだからC1セルの式は
 =IFERROR(MAX(INDEX(A:A,E1):INDEX(A:A,E2)),"")
 でいいか。
(ねむねむ) 2022/12/26(月) 09:22:29

ねむねむ様、ありがとうございます!大変助かりました。。。
内容拝見したのですが
ROW($1:$100)/((A$1:A$100=0)*(A$1:A$100<>"")
INDEX(A:A,E1+1):INDEX(A:A,E2-1)
はどのような意味になりますでしょうか。宜しくお願い致しますm(__)m
(すず) 2022/12/26(月) 23:17:50

 まず
 ROW($1:$100)/((A$1:A$100=0)*(A$1:A$100<>""))
 は
 1/((A1=0)*(A1<>""))
 2/((A2=0)*(A1<>""))
     〜
 100/((A100=0)*(A100<>""))
 となりA列が0でなにか入力されている場合はその行の行番号を、A列が0でない場合はエラー(#DIV/0!
)になる。
 (A=0だけだと空白セルも条件を満たすため<>""も条件に入れている)
 そしてAGGREGATE関数でエラーを除いた行番号の小さい順に抜き出している。

 INDEX(A:A,E1+1):INDEX(A:A,E2-1)
 は、E1セルにはA列が0の1番目のセルの行番号、E2セルには2番目の行番号があるため
 INDEX(A:A,E1+1)
 でA列が0の一番目のセルの下のセル、
 INDEX(A:A,E2-1)
 でA列が0の二番目のセルの上のセルを返すため
 INDEX(A:A,E1+1):INDEX(A:A,E2-1)
 でA列が0の1番目のセルと2番目のセルに挟まれたセル範囲を表す。

 もっとも最大値を求める場合に0のセルが含まれていても構わないため
 INDEX(A:A,E1):INDEX(A:A,E2)
 に訂正したが。

 このような説明でいいだろうか?
(ねむねむ) 2022/12/27(火) 09:09:53

 ちょっと確認だけ

 例示のA12とA13はどちらも「2」ですけど
 もしこれが最大値だったらどうなればいいんですか?

 それとExcelのバージョンは?

 以上
(笑) 2022/12/27(火) 11:40:43

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.