• ベストアンサー

車番毎の計量値の平均を出す方法を教えて下さい

エクセルの表です。 A B C 1 車番 計量値 2 2008 1200 3 2008 1300 4 2008 1250 5 1008 1250 6 1008 1250 7 1008 1300 8 2112 1300 9 2112 1350 10 2008 1450 この表の車番毎の積載量の平均を連続で求めて別のシートに表示したいのです。この場合車番2008はA2からA4で平均値をもとめ、A10は別に求めA列の車番順に表示して積載量の平均値を一覧にしたいのです。 欲張りな質問ですがどなたか教えて下さい。

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

  • ベストアンサー
  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.9

No2です。 >私の希望している結果が得られていると思いますが、A1:B4に >上書きされてしまいます。 一部シート名を省略した書き方でマクロを作成していますが、元のご質問文のほうに >別のシートに表示したいのです。 とありましたので、別シートに集計が出ているはずですが? (画像は同じシートになっていますが) 元のシートはそのままのはずなので、上書きではないはずなんですが… D列に集計を出すのなら、No7様がヒントを書いてくださっていますが、記入する列の指定をNo7の回答のようにして、かつ、新規シートを作成する以下の1行を削除すれば、同じシートのD列に記入されます。  Worksheets.Add Before:=ActiveSheet '←この行を削除 また、集計の記入開始を2行目からにしたければ、rOutが記入する行を示す変数になっていますので、その初期値を2に変えれば、2行目から表示されます。  rOut = 1 ’← これを rOut = 2 に変更 >>列方向もデータの最後まで計算させる方法を教えてください。 各列について、同じように平均値を求めるということでしょうか? 列方向にも集計のループをいれれば可能ですが、現状は集計対象が1列だけだったので、車番のチェック(同じ番号かどうか)と集計を同時並行で行っています。 列が多数の場合は、別々に行った方が混乱が少なくなりますね。 やるとすればこんな手順。(集計部分の手順のみ) 1)同じ車番の範囲を先にチェック。   同時にその範囲の列数の最大値を求めておく    (↑行によって列数が変わる場合) 2)上で求めた範囲(=行の範囲)で各列を集計するループ  (2列目から最大列まで)  1つの列について、対象行の数値(ブランクは除くなどして)の合計と、  セル数をカウントしておいて、平均値を求める。 計算もマクロで行うなら↑のような手順になりますが、これだと少々面倒なので、1)で同じ車番の範囲を調べたら、集計表にはその範囲を利用して  =AVERAGE(範囲) みたいな式を定義してしまう方が、簡単そうですね。 式を定義する方法だと、こんな感じになります。 1行目(タイトル行?)は、もとのシートのものをコピーします。 また、タイトル行の最大列までを対象として、式を代入します。 (集計は、新しいシートに行われます) Sub test() Dim st As Worksheet, dst As Worksheet, code As String Dim rw1 As Long, rw2 As Long, rmx As Long, rOut As Long Dim col As Long, colmx As Long Set st = ActiveSheet rmx = Cells(Rows.Count, 1).End(xlUp).Row colmx = Cells(1, Columns.Count).End(xlToLeft).Column Worksheets.Add Before:=ActiveSheet Set dst = ActiveSheet st.Rows(1).Copy dst.Rows(1) rOut = 2 rw1 = 2 While rw1 <= rmx  rw2 = rw1  code = st.Cells(rw1, 1).Value  If code <> "" Then   While st.Cells(rw2 + 1, 1).Value = code    rw2 = rw2 + 1   Wend   dst.Cells(rOut, 1).Value = code   For col = 2 To colmx    dst.Cells(rOut, col).Formula = "=AVERAGE(" & st.Name & "!" _     & Cells(rw1, col).Address & ":" & Cells(rw2, col).Address & ")"   Next col   rOut = rOut + 1  End If  rw1 = rw2 + 1 Wend End Sub

sumin2009
質問者

お礼

ありがとうございます。 望み通りの結果を得ることが出来ました。 すばらしいです。

その他の回答 (8)

noname#204879
noname#204879
回答No.8

[回答番号:No.5この回答への補足]へのコメント、 》 車番はA列の順番通りに出てきて欲しいのです。 それはピボテでは不可能です。精々次のように手動で行なうぐらいですね。 平均 / 計量値 車番      計測回 合計 2008        1 1250           2 1450 1008        1 1250           2 1250 2112        1 1325           2 1300 》 後で時間順にソートするなどは可能でしょうか。 ♪こういう具合にしやしゃんせ♪と具体例を表で示したらどうです?

sumin2009
質問者

お礼

ありがとうございました。

sumin2009
質問者

補足

後からupした画像に示しましたように車番はA列に出てきた車番順であること。 車番ごとに計量値の平均を求めるが、同じ車番でも1回目と2回目は分けて平均値を求めること。 計量値は70項目程度あること。 などが条件です。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.7

えっと つづけて#2さんのマクロについて >マクロはほとんど分かりませんが、取りあえずコピーして実行してみました。 >私の希望している結果が得られていると思いますが、A1:B4に上書きされてしまいます。 ならば >Cells(rOut, 1).Value = code >Cells(rOut, 2).Value = rslt / rCnt を Cells(rOut, 4).Value = code Cells(rOut, 5).Value = rslt / rCnt にしてみたらいかがかな? ※コードの意味がわからないでも実行できるってのはびっくりだけどね

sumin2009
質問者

お礼

ありがとうございました。 とても参考になりました。

sumin2009
質問者

補足

回答ありがとうございます。 面倒でなければもう少し教えて下さい。 この表は行数はデータが多ければ1500行程度、列数は70行程度のかなり大きなデータ数の表です。 行方向はこのままで良さそうですが、列方向もデータの最後まで計算させる方法を教えてください。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.6

#1です。 回答時の環境では画像が見えなかったので D列に補助値 と書きましたが、C列にするのが適切なようですね。 補助値があなたの希望する同一車番でも別平均とするキーにするものです。手入力してください。 提示された例では 1~9行目:1 10~15行目:2 数値を例にしましたが補助値はABCなどでもかまいません。 ピボットの行で 車番/補助値の順とし、それぞれ小計をなしにすれば見やすいでしょう

sumin2009
質問者

お礼

ありがとうございました。

sumin2009
質問者

補足

回答ありがとうございます。 お二人の方から同じ回答を頂きましたので同じ補足をさせて頂きますが、車番はA列の順番通りに出てきて欲しいのです。 実はこの表には時間のデータもあるのですが、集計したいのは車番毎の平均値なので車番を行ラベルにする必要があると思うのですが、後で時間順にソートするなどは可能でしょうか。

noname#204879
noname#204879
回答No.5

   A   B    C   1  車番 計測回 計量値 2  2008    1  1200 3  2008    1  1300 4  2008    1  1250 5  1008    1  1250 6  1008    1  1250 7  1008    1  1250 8  2112    1  1300 9  2112    1  1350 10 2008    2  1450 11 1008    2  1200 12 1008    2  1300 13 2112    2  1250 14 2112    2  1300 15 2112    2  1350 上に示すように手入力による「計測回」を設けたら如何ですか? 下のようにピボットテーブルで簡単に求まりますよ。 (「合計」欄は平均値を示しています) 平均 / 計量値 車番      計測回 合計 1008        1 1250           2 1250 2008        1 1250           2 1450 2112        1 1325           2 1300

sumin2009
質問者

お礼

ありがとうございました。

sumin2009
質問者

補足

回答ありがとうございます。 お二人の方から同じ回答を頂きましたので同じ補足をさせて頂きますが、車番はA列の順番通りに出てきて欲しいのです。 実はこの表には時間のデータもあるのですが、集計したいのは車番毎の平均値なので車番を行ラベルにする必要があると思うのですが、後で時間順にソートするなどは可能でしょうか。

noname#204879
noname#204879
回答No.4

初心者は初心者らしく・・・    A   B   C   D   E    F 1         1008 2008 2112 ←車番 2  車番 計量値 1267 1300 1325 ←平均値 3  2008  1200    1200 4  2008  1300    1300 5  2008  1250    1250 6  1008  1250 1250 7  1008  1250 1250 8  1008  1300 1300 9  2112  1300       1300 10 2112  1350       1350 11 2008  1450    1450 C2: =ROUND(AVERAGE(C3:C11),0) C3: =IF($A3=C$1,$B3,"")

sumin2009
質問者

お礼

ありがとうございました。

sumin2009
質問者

補足

回答ありがとうございます。 早速試してみましたが私の質問の仕方が悪かったので、 マクロを使用する方法以外のどなたの回答も車番2008が全て累計されて計算されます。 初めに出てきた2008は3回計量して1車分の積載ですし、後に出てくる2008は1回の計量で1車分になります。 また、2112は2回計量で1車分になります。 ここでは1車分ずつ計量値の平均値を求めたいので、車番は同じでも初めの2008と後の2008は別の車の扱いにして、車番順というのはA列に上から出てくる車番順に並べて取り出したいのです。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! すでに回答は出ていますが・・・ 他の方法の一例です。 >A10は別に求め・・・と書いてあるので、10行目を除いた平均です。 ↓の画像で E2セルを =SUMIF($A$2:$B$9,D2,$B$2:$B$9)/COUNTIF($A$2:$A$9,D2) としてオートフィルでコピーします。 以上、参考になれば幸いです。m(__)m

sumin2009
質問者

お礼

ありがとうございました。

sumin2009
質問者

補足

回答ありがとうございます。 この方法では同じ車番が出てくる度に検索範囲を変更して繰り返すことになるのでしょうか。 D列の車番をA列に出てくる順番通りに、自動で取得したいのですが。

  • fujillin
  • ベストアンサー率61% (1594/2576)
回答No.2

マクロでの例です 不明部分は適当に作成していますので、適宜修正を… Sub test() Dim st As Worksheet, code As String, rslt Dim rw As Long, rmx As Long, rOut As Long, rCnt As Long Set st = ActiveSheet rmx = Cells(Rows.Count, 1).End(xlUp).Row Worksheets.Add Before:=ActiveSheet rOut = 1 rw = 1 While rw <= rmx  rw = rw + 1  code = st.Cells(rw, 1).Value  If code <> "" Then   rCnt = 1: rslt = 0   If IsNumeric(st.Cells(rw, 2).Value) Then rslt = st.Cells(rw, 2).Value   While st.Cells(rw + 1, 1).Value = code    rw = rw + 1: rCnt = rCnt + 1    If IsNumeric(st.Cells(rw, 2).Value) Then rslt = rslt + st.Cells(rw, 2).Value   Wend   Cells(rOut, 1).Value = code   Cells(rOut, 2).Value = rslt / rCnt   rOut = rOut + 1  End If Wend End Sub

sumin2009
質問者

お礼

ありがとうございました。 この後は自分で勉強して望む形にしたいと思います。

sumin2009
質問者

補足

回答ありがとうございます。 マクロはほとんど分かりませんが、取りあえずコピーして実行してみました。 私の希望している結果が得られていると思いますが、A1:B4に上書きされてしまいます。 私のやり方が悪いのかよく分かりません。 もう少し、教えて下さい。

  • Sinogi
  • ベストアンサー率27% (72/260)
回答No.1

D列に補助値を入力し、ピボットテーブルで平均にすればよいと思います。 >車番2008はA2からA4で平均値をもとめ、A10は別に求めA列の車番順に表示して積載量の平均値を一覧にしたいのです ピボットの行で車番を優先すれば希望の形になります。

sumin2009
質問者

お礼

ありがとうございました。

sumin2009
質問者

補足

返答ありがとうございます。 早速試してみましたが、私の質問の仕方が悪かったので、マクロを使用する方法以外のどなたの返答も車番2008が全て累計されて計算されます。 初めに出てきた2008は3回計量して1車分の積載ですし、後に出てくる2008は1回の計量で1車分になります。 また、2112は2回計量で1車分になります。 ここでは1車分ずつ計量値の平均値を求めたいので、車番は同じでも初めの2008と後の2008は別の車の扱いにして、車番順というのはA列に上から出てくる車番順に並べて取り出したいのです。

関連するQ&A

  • 車番順に平均値を計算したい

      画像の上の表は車番と計量値のデータです。 同じ車番が2回とか3回連続しているときは2回又は3回計量して1車分になりますし、1回の時は1回の計量で1車分です。 行方向の車番は1500行程度、列方向の計量値は50列程度のデータ表です。 この表から画像の下の表のように、車番毎に計量値の平均を求めたいのです。 上のデータ表が大きいので平均値の表は別のシートが良いと思います。 ここで大切なのは、同じ車番 (例では123と987)が間に違う車番を挟んで2回出てきていますが、この場合には同じ車が折り返してきて次の出荷をしているのですから、それぞれ別に平均値を求めて上の表のA列に出てくる車番順に並べて欲しいのです。 これをエクセルで実行させたいのですが、どうもマクロをを使わないと出来ないようなので良い方法を教えて下さい。 ちなみに私はマクロはほとんど分からないのでこれから勉強します。

  • エクセルで年齢別体重の平均

    こんばんわ。 エクセルシートで下記の表があるとします。   A  B 1 30 10 2 50 20 3 64 30 4 70 40 5 71 40 6 77 41 7 73 43 8 75 45 9 77 47  (中略) 20 60 49 21 55 55 A列:体重、B列:年齢です。 表はB列の数字で若い順に上から下へ並んでいます。 列に対して名前(体重など)の定義はしていません。 40歳代のうち若い方から数えて3番目~8番目の人の体重の平均を取りたいと思います。 このような表がたくさんあるときに関数を使って簡単に処理したいのですが、どのようにすればよいでしょうか。 教えてください。 よろしくお願いします。

  • excel関数

    excelで作成した表のなかで a列には各コードが入力 b列は文字列 c列は数字 別にシートを作りコード順に 最小値と最大値、平均を求めたい b列に文字が入っていないデータを探して、別シートに入力したa列コードと一致するデータをc列から探し(複数データあります)その中で更に最小値と最大値、平均を求めたいのですが 関数が分かりません。 教えていただけば助かります。 よろしくお願いします。

  • エクセルでリストに対応するデータを別シートの表

    エクセルでリストに対応するデータを別シートの表に参照したいです。 「表シート」のB2にリストを作って、 (リストは「一覧表シート」のA,B,Cが入力されているセルを参照しています。) Aを選択すると101の下の段(B11)に、 「一覧表シート」のAの列101の111が入力されるようにしたいです。 Bを選択すると222、Cを選択すると333が入力できるようにしたいです。 この「表シート」の表がややこしいのですが、 建物の部屋番号に対応しているため、3階2階1階という順になっています。 関数で対応できるものでしょうか? 分かりにくい表ですが、よろしくお願いします。

  • Excel、複数シート同セルを別シートで列に表示するいい方法教えてください

    Excelで、複数シートの同セルに数値又は、文字が入力されているものを別シートの列に表示(反映)させるいい方法を教えてください。 ・sheet1は、一覧表(sheet名):纏めるsheet ・sheet2~は、各物件名(sheet名) となっています。 例) sheet2~sheet4のA1セルに数値、B2に文字が入力されていたとします。 それを、sheet1(一覧表)のB2、B3、B4とC2、C3、C4にそれぞれ表示させたい。以下参照。    A    B   C 1 物件名  件数 有・無 2 北海道  10   有 3 青森   15   無 4 岩手   20   無 ・sheet1(一覧表)には項目、物件名は入力済です。  データのみ反映させたい。 ・sheetは、左から順番に並んでます。  (北海道、青森、岩手の順に) ・集計するわけではないので、最終行には合計とかはいりません。 ------------------------------------------------------------- また、できるかどうかわかりませんが、 sheet1(一覧表)を修正したらそれぞれの物件(sheet2~)も修正される。というような、画期的なこともできるのでしょうか? こちらは、上記が出来た上でのことなので、出来なければ出来ないで構いません。 どうぞ、よろしくお願いいたします。

  • Excelで平均年齢を求める

    ExcelのシートのA列に34歳、45歳、・・・・と入力されている場合、平均年齢を求めるにはどうすればよいでしょうか。

  • エクセルのペースト方法

    教えてください。お願いします。 エクセルでA列に100個の文字列連続で入力されています。 別なシートに1セルつづあいているように ペーストしたいのですが。 (A列に100個の文字が入っているので使用されいるのは、A100のセルまでですが、別なシートにペーストされた際には、A200に最後の文字が入っているようにしたい)

  • エクセルで、指定の項目がある行をすべて別シートにコピーする方法

    いつもお世話になっております。 現在、売掛金台帳をエクセルにて作成しております。 それで、一覧で作成している台帳から、業者ごとのシートを作成したいと思っています。 一覧表は A列:業者名 B列:日付 C列:借方 D列:貸方 E列:備考 と作成しており、 Aの列が同じものだけを別シートにコピーしたいのですが、そのような方法はございますでしょうか。

  • エクセルで0を除く平均値と0の平均値を同時に表示させる方法について

    エクセルで、0を除いた平均を、 {=AVERAGE(IF(A1:A10<>0,A1:A10,""))}の数式を使って求めた場合、 データがすべて0の列の平均はエラー値になってしまいます。 すべてが0の場合は0と表示させたいのですが、どのような方法がありますでしょうか? 1つの計算式を使って、上記の2つの処理は可能でしょうか?

  • エクセル2010 検索とデータ移動

    エクセル2010を使っています。 【Sheet2】に画像の様な表があり、その表を【Sheet4】に移動したいのですが、条件があります。 表は 【Sheet2】の T列~DE列に必ず存在(全て同じサイズ) 行数は必ず8行。 その表のうち、T列の最上部に 1 が入力されているものだけを 【Sheet 4】 のA1 に上から順に表示させたいのです。 詳しい方、教えていただけませんか? よろしくお願い致します。

専門家に質問してみよう