• ベストアンサー

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

fujillinの回答

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

お礼

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

関連する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 に上から順に表示させたいのです。 詳しい方、教えていただけませんか? よろしくお願い致します。