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

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

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

分かりにくくてすみません。 エクセルの表から、各グループの最小値を判断して、+1以内の数字を識別、平均値を出したいです。 A~C列にデータが入っています。 列 A : B : C : D : E A-1: 1 : 2.05 :   : 1 A-1: 1.5: 1.08 :   : 1.5 A-1: 2 : 12.12 :   :  A-1: 3 : 0.35 :   :  A-2: 0.5: 1  :   : 0.5 A-2: 0.3: 2  :   : 0.3 A-2: 1.5: 3  :   :   A-2: 0.05: 4  :   : 0.05 とあるとします。 A-1グループのB列の中で最小値(1)を基準に+1以内のもの(1.5)をE列に出す方法はありませんでしょうか?(最小値も含む) 同様にA-2グループの最小値(0.05)を基準に+1以内のもの(0.3、0.5)をE列に出したいです。 次の段階で、E列に出されたものの C列の平均をD列に計算させたいです。 A-1グループの場合、(1、1.5)のC列(2.05+1.08/2)=1.565をD列4箇所に入れたいです。 同様にA-2の場合は、(0.05、0.5、0.3)のC列(4+1+2/3)=2.333333をD列4箇所に入れたいです。 (小数点以下 7桁目を四捨五入) 一番やりたいことは 各グループの 最小値から+1以内のものの C列の平均をD列に入れることですのでE列に出さなくても良いです。 どこか一部だけでも、E列に出すだけでも 分かればとても助かります。 マクロとか全く理解できていないので できれば 関数で教えてください。 すみませんが どうぞ宜しくお願いいたします。

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

  • ベストアンサー
  • 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)))

関連するQ&A

  • エクセルで数値の桁数を一定の法則で統一したい

    E列にA~D列のデータから計算された数値が並んでいます。 たとえば E1:9.9 E2:86.08695652 E3:212.8571429 E4:1158.13953488372 これらを E1:9.90 (整数1桁の場合は四捨五入して小数2桁まで)       1未満の数値も小数2桁で(例、0.96) E2:86.1 (整数2桁の場合は四捨五入して小数1桁まで) E3:213  (整数3桁の場合は四捨五入して小数カット) E4:1158 (整数4桁の場合は四捨五入して小数カット) 上記の法則で見やすく整理したいのです。 整数4桁が最大です。大量のデータをまとめて整理出来る方法は ないでしょうか?よろしくお願いします。

  • Excelで可変範囲内での平均値を出したい

    特定の範囲内で0以上の数値が入っている箇所までの平均値をだしたいのですが 関数でできますでしょうか。 【例】 A B C D E F --------------------------- 10 0 2  0 0 0 この場合、A列~C列までの平均値(4)を出したいです。 また、各数値は関数(SUM(A1:A2)等)で出力されており、可変になります。 エクセル初心者ですみませんが、よろしくお願いいたします。

  • エクセルである範囲の中での最大値、最小値を簡略に抽出する方法について

    はじめまして、この度はよろしくお願いします。 エクセルで例ば A列        B列        C列 0.0367659      a 0.033633907 0.025824788 0.020930498 0.011846518 0.006997131 0.002075281 -0.001972752   b -0.005546433 -0.009688783   c -0.014273939 -0.019588186 -0.023865392   d のように並んでいたとして、B列のa~b、b~c、c~d、の範囲の中でA列の最大値または最小値を求めたいのですがどのようにすればよろしいのでしょうか?(実際はabcdには数字が入ります) 今まで当方はC列に文字関数のmax,minを使い一箇所づつ範囲を指定しながらやってきたのですか、時間が膨大にかかってしまいます。 簡略に抽出できる方法があれば教えてください。

  • Excel 最小値に合致するカテゴリの抽出

    初めて投稿します。よろしくお願いします。 エクセルの行ごとに異なるカテゴリデータが入って(下記のようになって)いるのですが、A列に最小値のデータ、B列最小値のカテゴリを抽出したいのです。 A列の最小値については「=MIN(D2:I2)」で抽出できたのですが、品名を返すことができず手作業しかないかと思っています。 でも、データ数が多くだんだんとわからなくなってきてしまい、このようなことができるのかお聞きしたくて投稿させていただきました。  A列|B列|C列|D列|E列|F列|G列|H列|I列| 最小値|最小値のカテゴリ|空白|品名1|数量1|品名2|数量2|品名3|数量3| 10|バナナ(※自動表示したい)||りんご|50|みかん|100|バナナ|10| 3000|鶏肉(※自動表示したい)||鶏肉|3000|豚肉|5000|牛肉|10000| どのようにお聞きしたら良いのかわからず、説明不足な点があるかと思いますがお分かりの方がいらっしゃいましたらご教示ください。 お願いいたします。

  • エクセルで最新の最小値をだしたいのですが、、、

    エクセルで、最新の最小値をだしたいのですが、 MIN関数で最小値はだせるのですが、 最小値が同じものが複数あり、 一番新しいデータ入力日の最小値を 表示したいのでずが、 一番古いデータ入力日のものが 最小値として呼び出されてしまいます。 OR等を使って式を入力してみたのですが、 エラーがでてうまく値がだすことができません。。。 データは、C1からZ1までデータ入力日がはいっています B2からZ50まで数字がはいっています。 それぞれの行ごとの最小値をA列に表示させたいと思っています。 さらにそのあと、B列に、最小値のデータ入力日も表示させたいと 思っています。 ↓A2セルには、”10”  B2セルには、”3/11”と表示させたいのですが...  =MAX(MIN($C2:$Z2)*$C1:$Z1) こんな感じで作ってみたのですが、VALUEのエラーが でてしまいます。。      A列  B列  C列  D列  E列・・・ 1行目          2/10 3/10  3/11・・・ 2行目          10    15  10 ・・・  3行目          20    25  30 ・・・ ・ ・ ・ どなか分かる方どうか教えてください。 よろしくお願いします。

  • エクセルの任意範囲の最大値最小値の取得について

    エクセルデーター任意範囲の最大値と最小値の取得方法について教えて下さい。 例は以下の形式です。 //////////////////////////////////////////////////////////////// A B C D E G H I O 1 0.51 1.32 0.32 0.34 2 0.59 1.43 0.33 0.35 3 0.62 1.59 0.30 0.36 4 0.60 1.57 0.31 0.30 5 0.59 1.62 0.34 0.39 ←"+1"          6 0.68 1.64 0.34 0.34 7 0.68 1.60 0.33 0.33 8 0.59 1.58 0.31 0.30 9 0.49 1.40 0.33 0.29 10 0.38 1.20 0.29 0.29 . . . . . 11 -1.2 -2.3 -1.3 -1.4 . . . . . E列:昇順に1からの値 G列,H列,I列,O列:完全な規則性はない正負小数点の値。大きく見ると値は増加や減少ではあるが、1行ずつ見ると常に増加や減少とはなっていない。 最終行も未確定で、10回または、5回の同じ様なデーターの繰り返しで、繰り返し点(最大・最小)の値も決まっていない。 10回または、5回の各繰り返し点(最大・最小)を抽出し、以下の値を追記したい。 I列の最初の最大値の同じ行(B列)に"+1"、最小値の同じ行(B列)に "-1"を追記したい。同様に、"+1"~"+10","-1"~"-10"または、 "+1"~"+5","-1"~"-5"を追記したい。 I列が同じ場合、O列→H列→G列の順に最大値と最小値を判断する。 説明不足であるかもしれませんが、エクセル関数の組み合わせや、マクロ、VBAいかなる方法でもかまわないので、早急に処理できる良い方法はないでしょうか? よろしくお願いします。

  • 小数点4桁での四捨五入がうまくいきません

    エクセルで次のような計算をさせます。 A2 に1.8、B2に0.075、C2に0.075、 D2に= A2*B2*C2 、E2に=roundup(D2,4) D2の計算結果は 0.010125 です。小数点第5桁目の値を参照して第4桁目で四捨五入したいのですが、roundupでは0.0102、rounddownでは0.0101です。 表示させたいのは0.0101です。この場合、rounddownを使えば問題ないのですが、逆にrounddownだと小数点以下4桁目の四捨五入がうまくいかない場合もあります。 例えば A3に2.7 B3に0.08、C3に0.08 があり、E3にすべての値を掛けた結果を表示させると0.01728となります。 =roundup(E3,4)では0.0173となり、rounddownでは0.0172となります。この場合はroundup関数の結果である0.0173が求める数値です。 A列、B列,C列に任意の数字が入り、E列に4桁目で四捨五入した正確な値を求めたいのですが、なにか良い方法はないでしょうか。 VBAを使っても構いません。ちなみにこれは木材の材積計算に使用する目的です。 よろしくお願いします。

  • Excelで最大値最小値の検出

    皆さん こんばんは。  データのExcel配列は下記のようになっています。空白セル(数は不定)を境目に異なるグループに分け、各グループの最大値あるいは最小値を(グループごとに計算すればできますが、データの量が多いので手間かかります)一遍で検出したいですが、何かいい方法はないでしょうか。皆さん教えてください。宜しくお願い致します。 A列     B列        C列      D列     (時間)  (データ)     (最大値)   〈最小値) 0:00   7.316784186 0:05   7.178492184 0:10   7.031467139 0:15 0:20 0:25 0:30   4.878174647 0:35   3.402687629 0:40   2.051343872 0:45   0.420805671 0:50 0:55   2.175188612 1:00   2.849337126 1:05   3.256652642 1:10 1:15   4.427495186 1:20 1:25 1:30 1:35   6.008051928 1:40   6.773041277  ・    ・  ・    ・  ・    ・  ・    ・

  • エクセルの順位抽出について

    Sheet1のA列にコード、B列に商品名、C列に分類 D列に売上数、 E列に売上金額を入力した一覧表があります。 A_1:1000 B_1:牛肉 C_1:食品 D_1:20 E_1:3000 A_2:1050 B_2:お茶 C_2:飲料 D_2:18 E_2:3010 A_3:2000 B_3:鉛筆 C_3:文具 D_3:12 E_3: 900 A_4:2050 B_4:お米 C_4:食品 D_4:12 E_4:9010 A_5:3000 B_5:牛乳 C_5:飲料 D_5:25 E_5:2000 A_6:3050 B_6:定規 C_6:文具 D_6:28 E_6: 700 中略 A_300:10000 B_300:肉まん C_300:食品 D_300:38 E_300:9000 1.食品対象で売上金額の上位20のコードをSheet2のA列に表示 2.全商品対象で売上金額の上位20のコードをSheet3のA列に表示 上記の様な抽出をしたいのですがどの様な関数を使用すれば良いでしょうか? (オートフィルタを使用してのコピペという手作業をなくすためにSheet1の内容が更新されれば自動でSheet2,3の内容も更新されている のが希望です) よろしくお願いします。

  • エクセル2007で%の平均値を求めたいのですが、うまくできません。

    エクセル2007で%の平均値を求めたいのですが、うまくできません。 AVERAGEやIFをいろいろ組み合わせてみたのですが、どうしても分からないので教えてください。   A   B    C    D    E    F    G   H 1 目標  6.44%  4.50%  3.77%  5.15%  2.66%  2.79%  式を入れたいセル 2 実績  5.07%  6.00%  4.85%                 A2~G2の平均値 A1~G1は、=(F3/G6)みたいな数式が入っていて、%で表示されています。 B2~G2は、最初は空欄で毎月B、C、D、E、Fと一つずつ%が入っていきます。 上記で、H1のセルに、下記の様な結果を表示できる式を入れたいのですが、何かいい方法はないでしょうか? ・B2~G2が空白の時はB1~G1の平均値 ・B2にだけ数字が入っていてC2~G2が空白の時はB1の数字 ・B2~C2に数字が入っていてD2~G2が空白の時はB1~C1の平均値 ・B2~D2に数字が入っていてE2~G2が空白の時はB1~D1の平均値 ・B2~E2に数字が入っていてF2~G2が空白の時はB1~E1の平均値 ・B2~F2に数字が入っていてG2だけが空白の時はB1~F1の平均値 ・B2~G2全てに数字が入っている時はB1~G1の平均値 どうかよろしくお願いします。

専門家に質問してみよう