• ベストアンサー

エクセルマクロで表の途中の集計行と合計行追加

こんなことできますか? エクセルの表が各シートに一つずつあります。 B列からR列まで使用しています。 始まりは3行目で見出し行です。 データは4行目以降ですが、これは各シートごとに最終行は異なります。だいたい120行から200行程度です。 途中に空白はありません。 この表はS列の数値(12種類)により分類され並べ替えてあります。 やりたいのは、S列の数値を見て、分類(同じ数字)ごとに集計する行を追加したいのです。 集計する列は、D~K列だけです。 そして、最終行に全部の合計も出したいのです。 ただ、量が多いのと、頻繁に行なう作業なのでマクロでささっと出来ないかと思います。 どなたかどうすればよいか教えてください。 なにとぞお願いします。

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

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

マクロを使わなくても、 メニューの「データ」~「集計」でできると思います。

joker999
質問者

お礼

こんな便利な機能があったんですね。 眼からウロコです。 ありがとうございました。

その他の回答 (2)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

VBAで Sub test01() Dim s(30) '小計をいれる配列 Dim st(30) '総計をいれる配列 '---データスタート行のキーコード m = Cells(4, "S") '----D列-K列の小計・総計エリアクリア For c = 4 To 11 s(c) = 0 st(c) = 0 Next c '=================1行づつ繰り返し i = 4 While (Cells(i, "S") <> "") If Cells(i, "S") = m Then '--前行とS列で変わらない場合は足しこみ For c = 4 To 11 s(c) = s(c) + Cells(i, c) Next c '----変わった Else Cells(i, "S").EntireRow.Insert '行挿入 '----小計を挿入行のD列-K列にセット '---D列-K列の小計をD列-K列の総合計に足しこみ For c = 4 To 11 Cells(i, c) = s(c) st(c) = st(c) + s(c) s(c) = 0 Next c '----行挿入したので行ポインタiと最下行dを1行下へづらす i = i + 1 '----変わった最初行D列-K列を足しこみ For c = 4 To 11 s(c) = s(c) + Cells(i, c) Next c '----現在のキーコードを変更 m = Cells(i, "S") End If i = i + 1 Wend '=================最終行後 '----小計を最終行の次行のD列-K列にセット '---D列-K列の小計をD列-K列の総合計に足しこみ For c = 4 To 11 Cells(i, c) = s(c) st(c) = st(c) + s(c) s(c) = 0 Next c '----総合計をD列-K列にセット i = i + 1 For c = 4 To 11 Cells(i, c) = st(c) Next c End Sub S列のキーコードが変るたびに行挿入し、そこのD-K列小計をセットしている。 40行程度でテスト済み。

joker999
質問者

お礼

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

  • jindon
  • ベストアンサー率43% (50/116)
回答No.2

VBAですと、 Sub total() Dim ws As Worksheet, i As Long, ii As Long, lastS As Long For Each ws In Sheets With ws i = 4 Do Until IsEmpty(.Cells(i, 19)) lastS = .Range("s65536").End(xlUp).Row If lastS < i + 1 Then lastS = i + 1 End If For ii = i + 1 To lastS If IsEmpty(.Cells(ii, 19)) Then .Cells(ii, 3).Value = "小計" .Cells(ii, 4).FormulaR1C1 = _ "=subtotal(9,r" & i & "c:r[-1]c)" .Cells(ii, 4).AutoFill _ Destination:=ws.Range("d" & ii & ":k" & ii) ElseIf .Cells(i, 19) <> .Cells(ii, 19) Then .Rows(ii).Insert .Cells(ii, 3).Value = "小計" .Cells(ii, 4).FormulaR1C1 = _ "=subtotal(9,r" & i & "c:r[-1]c)" .Cells(ii, 4).AutoFill _ Destination:=ws.Range("d" & ii & ":k" & ii) lastS = .Range("s65536").End(xlUp).Row i = ii + 1 Exit For Else End If Next i = ii + 1 Loop .Cells(lastS + 1, 3).Value = "合計" With .Cells(lastS + 1, 4) .FormulaR1C1 = "=subtotal(9,r5c:r[-1]c)" .AutoFill Destination:=ws.Range("d" & lastS + 1 & ":k" & lastS + 1) End With End With Next End Sub

joker999
質問者

お礼

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

関連するQ&A

  • Excel 2007 マクロ 表の集計について

    Excel 2007 マクロ 表の集計について 2つのシート(Sheet1とSheet2)の情報を集計して Sheet3に反映するマクロを考えています。 (1)Sheet1のC列、D列、E列とSheet2のC列が空欄の場合は  Sheet3に反映しません。 (2)Sheet1のC列、D列、E列とSheet2のC列のいずれかに数値が  入っている場合にはSheet3に行を反映します。  ※Sheet3に反映する際に、Sheet1とSheet2のキー(A列)は  反映しません。  各Sheetの表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

  • エクセルマクロ、集計行の上に空白行挿入

    エクセルデータがA、B、C、D、E列1000行まであります。 C列基準でE列を合計するマクロを作成しましたが(集計行はデータの下に挿入)、実行の結果、新たに挿入される集計行の上に空白行を1行挿入していくということを、作成したマクロに付加できるでしょうか? ご教授頂きたく、お願いします。

  • Excelで集計したとき、集計行にその上の行の文字データを表示させたい

     Excelで集計したとき、合計行には数字などの列データは合計されますが、文字列データの列は数字が出てくるので、折りたたんだときに、たとえば(顧客名の列でAさんだとたら)合計行にも、Aさんという文字を表示させたいです。  手順としては集計させたあとに、マクロで合計行にもその上の文字列を単純にコピーできたらいいです。  手作業でもいいのですが、顧客名が多くて大変です。よろしくお願いします。

  • エクセルVBAで同じ種類を集計したい

    A列からAS列までの大きな表があります。 1行目はタイトルで2行目から約500行くらいまでがデータです。 データはA~X列が文字列でAAからAS列が数値です。 これをP列の文字列を基準として 同一のものを別シートにコピーし、その最終行のAAからAS列に数値の合計を入れたいのです。 300行のデータはP列の文字で分類すると20シート程度になるかと思います。 データは既にP列を基準にソートしてあり、途中空白行はP列にはありません。 なにとぞよろしくご教示お願い申し上げます。

  • エクセル マクロ VBA

    エクセルのマクロについて質問です。 『集計』というブックの『集計開始』というシートに     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 コメント  空白     空白   3行目 空白   空白     空白 4行目 商品名  支店     個数  5行目 空白   空白     空白 6行目 空白   空白   コメント1 7行目 空白   空白     空白 8行目 空白   空白   コメント2 9行目以降    上記のデータ(見出しを除く)の繰り返し というデータが入っています。 B列の中に『AAA』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 C列の中に『B』という文字が含まれていたら、そのセルを空白に置換し、 含まれていなかったら、そこで処理がとまったりエラーが出たりしないで次のステッップへ進み、 (今は、手作業で編集→置換→検索する文字列の中に『B*』と入力し、 置換後の文字列を空白にしてすべて置換ということをやっています。)                            ABC列(データーの入っている行まで)の空白を含む行を一括削除し、 以下のような形にしたいのです。     A列    B列     C列 1行目 見出し  見出し   見出し      (商品名)  (支店)  (個数)         2行目 商品名  支店     個数  3行目 商品名  支店     個数          ・         ・ このようにするマクロ文はどのようになりますでしょうか?

  • EXCELでこんな集計はどうするのでしょうか

    商品管理の表で以下のようになっています。 A1   B1    C1     D1    E1 担当者 分類番号 商品コード 整理番号 以下各月毎の売り上げ そしてこの表は1500行程度あり、B列、C列でソートしています。 この表をB列の分類番号毎、C列の商品コード毎で各月の売上合計を上記の表のシートとは別のシートに集計したいのですが、どのようにしたらよいのでしょうか。シートをコピーして集計するのはできるのですが、そうしたら容量が(サイズが)大きくなりすぎるため、できれば避けたいと思っています。

  • エクセルのマクロでこういう場合は?

    エクセル97です。 Sheet1の E3:J29 に表があります。 E列、F列は文字列、G列は数値、H~J列には式が入っています。 この表の G列の値が空白や0でない行だけをコピーして、Sheet2 のB2 以下に切れ目なく表の「値」を貼り付けるにはどうのようなマクロを書けばいいのでしょうか?(G列が空白や0の行はSheet2の表では一切無視され、空白行ができないようにしたいのです。) よろしくお願いします。

  • エクセルで表のある列を最初から最後まで選択するマクロ

    今現在、シートにA3:E700までの大きな表があります。 中のデータは文字列や数値です。 A列B列には途中に空白はありません。C~E列には空白もあります。 この表のB列だけを選択するマクロを書きたいのですが、データは日々増減するため最終行が特定できません。 どのように書けばいいのでしょうか?

  • EXCELで途中の集計行を除いて集計したい。

    EXCEL2002で合計を出したいのですが、途中に「合計」とか「中計」などの集計行があり、最初から最後までSUM関数を使うとその分だけ重複してしまいます。途中の計算式が入っているセルを除いて集計するには、どうしたらよいでしょうか?A列に項目(例えば、事務用品、コピー用紙、小計、固定電話料、携帯電話料、通信費計・・・)、B列に数値または計算式を入力しています。

  • エクセル 集計行をデータの次の行に表示させたい。空白セルを削除したい。

    基準となるグループの最後のグループの集計行はなぜか、選択範囲の下に表示されます。 例えば  1行目  会社 サービス 単価  回数  合計金額  2行目   A    1   100   2    200  3行目   A    2   150   3    450  4行目   B    4   1000   4    4000  5行目   C    3   500   10   5000     以下空白   :   :   :    :  (20行目)   ここまで空白 以上のような任意の表(1行目から20行目までデータが入力されています。上記のような3社で4行で終わる場合もあれば、5社で10行という場合もあります)で会社ごとの合計金額を集計したい時に、(1行~20行を選択し、グループの基準:会社 集計の方法:合計 集計するフィールド:合計金額 集計行をデータの下に挿入という設定)  1行目  会社 サービス 単価  回数  合計金額  2行目   A    1   100   2    200  3行目   A    2   150   3    450  4行目     A集計            650  5行目   B    4   1000   4    4000  6行目     B集計            4000  7行目   C    3   500   10   5000      以下空白   :   :   :    :  23行目     C集計            5000  24行目     総計             9650 となってしまいます。上記の参考データならば 8行目から22行目までが無駄に空白ができてしまいます。 これを、8行目にC集計を表示させることはできるのでしょうか? 集計後の表をコピーして他シートに貼り付けるマクロを組んでいます。 データによっては、1つの会社の集計が表示されません。宜しくお願いいたします。上記を満たすマクロでも結構です。

専門家に質問してみよう