• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルの最小値判別と範囲内数値の抽出と平均値)

エクセルの最小値判別と範囲内数値の抽出と平均値

このQ&Aのポイント
  • エクセルの表から各グループの最小値を判断し、+1以内の数字を識別し、平均値を求める方法についてご質問です。
  • 質問の主な内容は、A-1グループとA-2グループにおける最小値から+1以内の数字を識別し、D列に平均値を計算する方法です。
  • 最終的には、各グループの最小値から+1以内の数字のみを取得し、その中のC列の数値の平均をD列に入れたいとのことです。

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

  • ベストアンサー
  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.1

E1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",IF(B1<MIN(INDEX(B:B,MATCH(A1,A:A,0)):INDEX(B:B,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1))+1,B1,"")) D1セルには次の式を入力して下方にオートフィルドラッグします。 =IF(A1="","",SUMIF(INDEX(E:E,MATCH(A1,A:A,0)):INDEX(E:E,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1),">=0",INDEX(C:C,MATCH(A1,A:A,0)):INDEX(C:C,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)+1))/COUNT(INDEX(E:E,MATCH(A1,A:A,0)):INDEX(E:E,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1)))

siho00
質問者

お礼

早速ありがとうございます。できました! 最小値を認識させる時点でお手上げだったのですが、やりたかった事 全て叶えてくださってありがとうございました。

その他の回答 (3)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.4

ANo.1様とANo.2様の方法は、A列のグループが、グループごとに隙間なく一塊になっている場合に限り、有効な方法ですが、グループが一塊になっていない場合、例えば、 A列 A-1 A-1 A-2 A-1 A-1 A-2 A-2 という様に、グループごとの塊の途中に別のグループが入っていて、グループが分断されている場合や、 A列 A-1 A-1 A-1 A-1 A-2 A-2 という様に、グループごとの塊の途中に途中に空欄が入っていて、グループが分断されている場合には、 ANo.1様とANo.2様の方法では正しい値を求める事が出来ません。  もし、A列のグループが、グループごとに一塊になってはいない場合には、次の様な方法となります。  御質問の >A-1グループのB列の中で最小値(1)を基準に+1以内のもの(1.5)をE列に出す方法 で平均値を出されるのであれば、まず、E1セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($B1),$B1-MAX($A:$A)-1+SUMPRODUCT(MAX(($A$1:INDEX($A:$A,MATCH(99^9,$B:$B))=$A1)*(MAX($A:$A)+1-$B$1:INDEX($B:$B,MATCH(99^9,$B:$B)))))<1),$B1,"")  次に、D1セルに次の数式を入力して下さい。 =IF($A1="","",SUMPRODUCT(($A$1:INDEX($A:$A,MATCH(99^9,$E:$E))=$A1)*ISNUMBER($E$1:INDEX($E:$E,MATCH(99^9,$E:$E)))*$C$1:INDEX($C:$C,MATCH(99^9,$E:$E)))/SUMPRODUCT(($A$1:INDEX($A:$A,MATCH(99^9,$E:$E))=$A1)*ISNUMBER($E$1:INDEX($E:$E,MATCH(99^9,$E:$E)))))  そして、D1~E1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  以上です。  尚、上記の方法では、あくまでも「御質問内容に沿って、条件に合致している行のE列のセルに、B列の値を参照させている」ため、D列の数式が複雑になっています。  単に、条件に合致している行のみの、C列の平均値を算出されるのでしたら、条件に合致している行のE列のセルには、B列の値ではなく、グループ名であるA列の値を表示させた方が、D列の数式が遙かに単純化しますので、以下の方法の方を御奨め致します。  まず、E1セルに次の数式を入力して下さい。 =IF(AND(ISNUMBER($B1),$B1-MAX($A:$A)-1+SUMPRODUCT(MAX(($A$1:INDEX($A:$A,MATCH(99^9,$B:$B))=$A1)*(MAX($A:$A)+1-$B$1:INDEX($B:$B,MATCH(99^9,$B:$B)))))<1),$A1,"")  次に、D1セルに次の数式を入力して下さい。 =IF($A1="","",SUMIF($E:$E,$A1,$C:$C)/COUNTIF($E:$E,$A1))  そして、D1~E1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。  以上です。

siho00
質問者

お礼

kagakusuki様 ありがとうございました。 E列の式がうまく計算されないようで?? #VALUE!になってしまいました。 今回はNo.1の方法で提出できました。 また 教えてください。 どうもありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.3

No2の式でー1とすべきところが+1になっていました。訂正してください。E列が無い場合の式です。 =IF(A1="","",SUMIF(INDEX(B:B,MATCH(A1,A:A,0)):INDEX(B:B,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1),"<"&MIN(INDEX(B:B,MATCH(A1,A:A,0)):INDEX(B:B,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1))+1,INDEX(C:C,MATCH(A1,A:A,0)):INDEX(C:C,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1))/COUNT(INDEX(E:E,MATCH(A1,A:A,0)):INDEX(E:E,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1)))

siho00
質問者

お礼

E列が無い場合で、E列を参照する式になっているようで うまく計算できませんでした。 でも これが出来れば一番早いと思います。 今回は No.1の方法で提出できました。 すぐに回答いただけ 本当に助かりました。 どうもありがとうございました。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

E列が無くてもD1セルに次の式を入力して下方にオートフィルドラッグすることで平均値を表示させることもできます。 =IF(A1="","",SUMIF(INDEX(B:B,MATCH(A1,A:A,0)):INDEX(B:B,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1),"<"&MIN(INDEX(B:B,MATCH(A1,A:A,0)):INDEX(B:B,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1))+1,INDEX(C:C,MATCH(A1,A:A,0)):INDEX(C:C,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)+1))/COUNT(INDEX(E:E,MATCH(A1,A:A,0)):INDEX(E:E,MATCH(A1,A:A,0)+COUNTIF(A:A,A1)-1)))