• ベストアンサー

マクロを使用した表において集計を自動表示する

エクセルのマクロでABC集計表なるものを作成しています。ボタンを押す毎に下位に行が追加され表ができる形です。行を挿入する毎に右側の3列に設けたセルにA~C品の数量を記入し、その集計を各2行目のセル(色付きのセル)に表示できるようにしたいと考えています。例えばA品の集計をK6に”=SUM(k7:k7)”として、ボタンを押して下へセルを追加しますと、集計が正しくされず、計算式を確認すると”=SUM(k8:k8)”となっており、数列1のk7が固定されていません。 マクロ文を入れないとできないのでしょうか、ご教授下さい。よろしくお願いします。

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

  • ベストアンサー
回答No.6

もしも、「常に7行目に新しい数値の入力欄を作る」というのが正しい仕様であれば、今までの方法は使えません。 行の挿入マクロは元のままにしておいて、 Sub sumary() Dim i, smr As Integer smr = 0 For i = 11 To 13 For j = 7 To Cells(Rows.Count, i).End(xlUp).Row smr = smr + Cells(j, i) Next j Cells(6, i) = smr smr = 0 Next i End Sub 集計用に、こんなマクロを使ったらどうでしょう? 行の挿入ボタンで常に7行目と6行目の間に行が挿入され、過去の入力は下へ送られていくわけですが、このマクロで常に7行目から最終行までの値を合計して、それぞれの6行目に書き込むことができます。

gge7ahjk1n
質問者

お礼

大変ありがとうどざいました。マクロについては、今回初めての初心者です。早速使用しています。

その他の回答 (5)

回答No.5

Rows("7:7").Select Selection.Insert Shift:=xlDown これがダメです。 行の挿入が、毎回7行目の上に挿入されてますので、集計をやる対象がずれていくのです。 現在のマクロを利用するとして Sub Macro1() Macro1 Macro Sheets("(削除禁止シート)").Select Rows("1:1").Select Selection.Copy Sheets("ABC集計表").Select Dim 最終行 As Integer Dim 基準セル As String 最終行 = Cells(Rows.Count, 11).End(xlUp).Row + 1 基準セル = "K" & 最終行 Range(基準セル).EntireRow.Insert Range("A2:C3").Select End Sub これでやってみてはいかがですか? それとも、新しい数値を入力する欄が常に集計セルの1行下にある というのが仕様ですか?

回答No.4

>=SUM(K7:K8)と入力してやってみましたが、=SUM(K8:K9)となり、K7:K9となりません 行の挿入が、6と7の間になっているからですね。 行の挿入ボタンでマクロを動かしていると思いますが Sub inserRow() Dim 最終行 As Integer Dim 基準セル As String 最終行 = Cells(Rows.Count, 11).End(xlUp).Row + 1 基準セル = "K" & 最終行 Range(基準セル).EntireRow.Insert End Sub これでやってみてください。 ここでは、K列を基準に見てますので、K列のデータがある最終行を取得して+1したところに行を追加しています。 うちでやってみたところ、 =SUM(K7:K8) が狙い通りに =SUM(K7:K9) となりましたよ

gge7ahjk1n
質問者

補足

早速、試してみましたが行を挿入するたびに、K7:K8→k8:k9→k9:k10→k10:k11と変わります。 恐らく行挿入のマクロに問題があるように思います。いかがでしょうか マクロ文は以下の通りです、 Sub Macro1() Macro1 Macro Sheets("(削除禁止シート)").Select Rows("1:1").Select Selection.Copy Sheets("ABC集計表").Select Rows("7:7").Select Selection.Insert Shift:=xlDown Range("A2:C3").Select End Sub

回答No.3

ボタンを押すと数値入力欄が下に追加され、 数値入力欄のK列~M列それぞれの合計が 6行目に表示されるってことでいいんですね? わざわざ、K~Mの右の方を使ってるということは、 A~Jにもなんらかの表などがあって連動したいとか、 事情があるのかな?などと考えています。 --------------------------------------------- 一例として 特にマクロなど組まなくても、最初からセルのK6,L6,M6に =SUM(K7:K8) , =SUM(L7:L8) , =SUM(L7:L8) としておき、行の追加はデータのある最終行+1とする (手動で行を挿入してもいいとは思いますが・・・) 8行目は空白となってますので、 行が挿入されるのは、最初7行目と8行目の間になります。 すると、集計セルの式は =SUM(K7:K9) , =SUM(L7:L9) , =SUM(L7:L9) と書き換わります いかがでしょうか? どうしても無駄な行を出したくない場合には、マクロを組みましょう

gge7ahjk1n
質問者

補足

早速のご回答ありがとうございました。 =SUM(K7:K8)と入力してやってみましたが、=SUM(K8:K9)となり、K7:K9となりません。何か原因があると思われます。他の方法も試してみますが、わかりましたらお知らせ下さい。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

2行目の色つきセルに,最初から =SUM(K7:K1000) などのように十分下のセルまで合計する式を入れておき,あとは単純に下へ下へとデータを書き足していけばそれで終わりのようです。特にわざわざマクロを持ち込む必要が見あたりません。 マクロを使って「行を追加する」のが重要なのなら,その部分はそのまま残しておいて今後も使い,上述のようなSUMの式を事前に入れておくことで「マクロにSUMの式(集計の式)を入れさせる」のはヤメにするのでもOKです。

回答No.1

図や実際の表の画像でも添付してもらわないと、 この文章だけじゃ仕様のイメージがさっぱりわかりません。 例を書くいてあるけど、もっと具体的に。 >右側の3列に設けたセル 具体的にどこですか? >集計を各2行目のセル(色付きのセル)に表示 具体的にどこですか? >K6に”=SUM(k7:k7)” これって、K6=K7と一緒 申し訳ないですが、もっときっちりと仕様説明してください。

gge7ahjk1n
質問者

補足

ファイルを添付する予定でしたがファイルの添付方法がわかりませんでした。         ボタン                           k列   L列  M列 5行                         A品  B品  D品 6行                        集計セル 集計セル 集計セル 7行                        数入力 数入力 数入力 以下、ボタンを押して下位へセルを追加して、k~Mへ数値入力して、各製品の集計をK6、L6、M6へ セルが追加されるごとに合計を表示さたいのです。

関連するQ&A

  • エクセルの集計

    エクセルでの集計(集計と呼べるか解りませんが)についてです。 A列に品番 A-1・A-2・A3・・・が入力されています。B列に品番の残数量 300・500・500・・・が入力されています。品番と残数量で1つの表になっています。 上記の表を基に、他のセルに使用数量を入力して行くと、使用した数量内の品番と数量が自動で集計され、使用数量の下や隣に表示される様にしたいのですがどの様な方法があるでしょうか? (例)C1に使用数量:500と入力すると指定したセル(C2~で品番と数量は別のセルに分けます)にA-1:300 / A-2:200 D1に500と入力すると指定したセル(D2~)にA-2:300 / A-3:200 と、表の上(下からの場合もあります)から使った分を引いて行かれ、集計され、表示したいのです。 宜しくお願いします。 補足 使用した数量と使用した内訳は同じシート内で別の表としています。入力した使用数量の中に、どの品番が何キロ使用されていて、その品番が無くなったら次の品番を何キロ使用したかを自動で集計したいのです。

  • 【Excel】マクロを使って、自動集計ができるようにしたいと思っています。

    こんにちは。 宜しくお願い致します。 アクセスがあったデータをピポッドテーブルでまとめ、さらに集計結果を出したいと思っています。 ピポッドテーブルを作成するまではマクロの自動記録でどうにかなったのですが、その後の集計結果のところでとまどっています。 <データの現状> ※ピポッドテーブルで出したデータは、1・2行目が空白、3~5行目に項目名が入っており、6行目からデータが入っています。何行までデータが入っているかはその月によって異なり、行の一番最後はA列に「総計」と入力されています。 ※A~C列は項目名(日付や商品名など)が入っています。 D列以降は合計などが入っており、ここで基準として使いたい項目はすべて4行目に入っています。 列の数は項目によって増減します。 項目の一番最後は「総計」です。 マクロで集計したいのは次の作業です。 (1)「Sheet1」を全コピー→「Sheet2」に形式を選択して貼り付け→値貼り付け (2)貼り付けたシートで、D列以降、4行目の項目が「集計1」「集計2」「詳細集計」「総計」以外のものも列を表示しないにする ※D列から始まって、「集計1」の前の列までを表示しないにするのと、「集計1」の次の列から「集計2」の前の列までを表示しないにしたい。 例えば、H列に「集計1」・L列に「集計2」が入力されている場合は「D~G列」「I~K列」を表示しないにしたい。 (3)詳細集計の列を1列選択し、列を1行挿入。挿入した列4行目のセルに「合計」と入力。 (4)挿入した列のところに、6行目以降、A列に「総計」と入っている行まで数字のデータが入っているところ(A列で「総計」と表示されている行まで)は、「集計1」と「集計2」のセルの合計をそれぞれ表示し、枠線を入れる。 (5)一番先頭に1列挿入し、6行目から元A列の「総計」と表示されている前までの通し番号を入れる。 (6)「総計」の次の列の4行目に、「ゼロ数」と入力し、5行目に(3)で挿入した列、A列に「総計」と入っている1行前までの範囲で「0」表示があるセル数を表示。 (7)ゼロ数と入力したの次の列の4行目に「ゼロ率」と入力し、先に出した「ゼロ数」を(5)で入力した通し番号の一番最後の数で割った数を表示。 (8)入力終えた後はA1のセルを選択。 以上になります。 長いですが、どなたか教えてください。 宜しくお願い致します。

  • ExcelのSUM関数の集計範囲を可変にしたい

    ExcelのSUM関数の集計範囲を可変にしたい 1.状況、問題点 商品毎の売上、利益を管理するリスト表が あり、その表の行に対する追加、更新処理を VBAマクロで行っています。 使用環境はExcel2010 リスト表は、帳票としての見易さを考慮して、 同じカテゴリに属する複数の行に対して小計行 を設けカテゴリ別の売上、利益を集計しています カテゴリに属する行範囲に対してSUM関数を使っ ているということです (例1)この表にマクロで行を追加させる際、 あるカテゴリの小計欄で参照している集計 範囲の行の途中に行を挿入する場合は、行 を追加してもSUM関数の集計範囲は自動的に 拡大されます。   A  B    C   1 項目   売上    2  田中   100 3 小計   100   4 山田 200 ⇒ 挿入   5  佐藤 300   6  小計   600 式 = SUM(C4:C5) 3行目と4行面の間に行を挿入するとき  SUM関数の集計範囲は自動的に拡大され る  SUM(C2:C4) ⇒ SUM(C2:C5) (例2)挿入する行が集計行の直ぐ上の場合 SUM関数の集計対象範囲がずれてしまう   A   B    C   1 項目  売上   2  田中  100 3 小計  100   4 山田 200   5  佐藤 300 ⇒ 挿入    6  小計 600 ※      ※ 式 SUM(C4:C5) は   自動的にはSUMC(C4:C6)とはならない 2.実現したいこと       小計の直前にに行を挿入した場合も自動的に   集計範囲が変わるようにしたいのです。 実装方法 案1 (1)インストラクタのネタ帳  http://www.relief.jp/itnote/archives/003417.php  に、「表全体の最後の行」※に集計行がある場合として 「合計範囲を自動的に変更する」方法の紹介あり。  この方法はCOUNTA()で入力済みのセルをカウント。   私のケースでは  ・売上、利益などのセルが空白となる場合がある  ・C列は 売上 データを記載する列で   なので半角スペースや全角スペース は入らない  ・#REFやDIV/!0などは入りうる   C4:C5 のセル数は DIV/0!なども含めデータが入っているセル数  +ブランクが入っているセル数 は  COUNTA(C4:C5) + COUNTBlank(C4:C5) なので セル C5  =SUM(C2:INDEX(C4:C5, COUNTA(C4:C5)+COUNTBlank(C4:C5))   とするか?     ※「インストラクタのネタ帳」の方法は、「表全体の行数」を  もとめる場合に最後の行までを指定できて有効ですが、上の  ように小計をもとめる場合は、どうしても小計をもとめる範囲  式に書く必要があり、そこが集計範囲が変わってしまうと役に  立たないです。  代案としては、6行目の小計の行番号から3行目の小計の行番号  を引いて行数を求める方法でしょうか    この方法の場合、小計の式に 6行目行番号-3行目行番号  のように具体的に記述してはNGなので "下"の小計行から"上"  の小計行を引く というような間接的な指定の仕方が必要と  考えています。案1の検討はここまでです。 実装方法 案2  上のように表自体の集計関数を変える以外に、  マクロで対応する方法  行を追加する際に、 a)行の追加がある場合、行の挿入位置が小計   の集計範囲の”途中”なら 何もしない、  b)追加する行が集計行のすぐ上になる場合 つまり変更前の挿入位置+1   が小計行の行番号と等しい時は、追加する行数分   SUM関数の集計範囲を広げる     案1が難しそうなので案2で実装しようと思っています  Q1 案1と案2の検討結果についてお気づきの点があれあば教えて     ください  Q2 可能であれば、案2の実装方法についてヒント程度でもいいので     教えてください  以上

  • 表 集計の表示を変える マクロ エクセル

    添付の画像のように左の表から右の表になるように集計の表示を変えたいです。 実際には左表の縦方向に100行ぐらいあります。 一度こちらで質問したらシンプルな関数を教えていただいたのですが、自分がカスタマイズしやすいように、マクロで以下の方法でやりたいです。 1.黄色の範囲をタテヨコ変えてコピペ 2.緑の範囲、青の範囲も同様 3.いいいの行も上記同様 これを繰り返す。 タテヨコを変えてコピペをやるのはマクロ記録でできるのですが、 2行おきにそれを繰り返す記述が分かりませんので教えてください。

  • 点数集計用エクセルマクロの作り方

    エクセルでのマクロは全くの初心者です。今、たとえばテスト結果の集計をマクロで自動的にしようとしています。 ・解答者:あいう、かきく、さしす、・・・・ ・クラス:A,B,C,D、・・・・ ・1回目点数:10点、20点、30点、・・・・ ・2回目点数:10点、20点、30点、・・・・ といった、採点結果.csv があるとします。 機能(1) マクロでできたエクセルの集計ボタンを押すと、  ・クラスがA  ・2回目点数が50点以上  ・(2回目点数 - 1回目点数)>0 の条件で、csvの行をエクセル行として下へ下へ書き出してくれる 機能(2)  最後に件数の合計行を表示 機能(3)  合計行のセルを別シートのセルにコピー  (グラフ作成の基となる表の材料とするためです) というようなマクロを作成したいと思っています。 どのようにすればいいのでしょうか? 質問の仕方があいまいですが、おそらく録音ボタンを押して 一連の動作を記録?して、あとはソースを編集するといったほうほうでいいのでしょうか? ifを使うなど、概要でいいので、やり方を教えていただけるとありがたいです。

  • 表の行を増やすマクロの疑問

    見積書の表があります。 A1は欄外の空白セル、B1は内容欄、C1は数量欄、D1は単価欄、E1は金額欄です。 B2からE2は値を記入する欄としE2には数量*単価の関数を埋め込みます。B3からE3までも形はそれと同じにし、E4が合計の値を記入する欄で関数は=SUM(E2:E3)です。その上で第3行を「表示しない」とします。 必要なだけの行を随時追加してゆく為に、苦労して次のような動作をするマクロ記録を作りました。 A4にフォームのボタンを置き、A4セルをクリックした後にそのボタンをクリックすれば非表示になっている直ぐ上の行を表示させてコピーし、その場に表示行として新規挿入します。 つまりE4は繰り下がりE5になりますが、自動的に関数は=SUM(E2:E4)となります。 そして新しく第4行を非表示としてやります。この繰り返しです。 記録されたマクロを見ると下のようになっています。 Sub 増行() ' ' 増行 Macro ' マクロ記録日 : ユーザー名 : ' ' ActiveCell.Select ActiveCell.Offset(-1, 0).Range("A1:E3").Select Selection.EntireRow.Hidden = False ActiveCell.Offset(0, 0).Range("A1:E1").Select Selection.Copy Selection.Insert Shift:=xlDown ActiveCell.Offset(1, 0).Range("A1:E1").Select Selection.EntireRow.Hidden = True ActiveCell.Offset(1, 0).Range("A1").Select End Sub このマクロはちゃんと機能するのですが、問題はこのシートの値を記入する場所以外を 保護しようとすれば「実行時エラー'1004' RangeクラスのInsertメソッドが失敗しました」 と表示されます。 どうすればこれを避けて保護する事が出来るでしょうか。 よろしくお願いします。 なお私は超初心者なので自分でVBを記述したり意味を読み取る事はほとんど出来ません。

  • 別々のシートの表を集計したい

    別々のシートにある表を集計したいのですが、簡単に初心者でもできるやり方はないでしょうか? 商品ごとの週間発注数量を、画像のように一日ごとに集計したいのです。 新規シートにコピー・ペーストを繰り返せばできないこともないのですが、行や列を間違える可能性がありそうで・・・ 使用ソフトはエクセル2003、2007でアクセスは入っていません。 ちなみに作業する人がパソコンが苦手な人たちばかりでエクセルもまともに使える人がいません。 マクロか何かでボタンひとつでできるとか夢のようなことは言いませんが、テンプレートを作ってそこに流し込むだけでできるようにでもなれば理想なのですが、なかなか思うようにいきません。 販売大臣が入っているパソコンがあるので、そちらで入力し、日計集計しようとも思ったのですが、データ量が多くなり入力に時間かかってしまうのがネックで悩んでいます。 何かいい案がないでしょうか? お知恵を拝借できれば非常にありがたいです。よろしくお願いいたします。

  • 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の表は画像を添付します。  どのようなマクロを作成すればよろしいでしょうか。  マクロの超初心者です。  マクロのサンプルをご紹介頂けますでしょうか。

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

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

  • 自動で3つの表から一つの表にする方法

    EXCELで一つのタブに A/B/Cと3つの表があり それぞれ国名と数値が並んでます。 問題は AにはあるけどBCにはないや、AとCだけにある国名が有ります。 それらを 新しくDという表にABC全ての表から抜けなく全部の国名を抜き取る方法を教えていただけませんか? 毎月の集計に必要なので できれば 関数かマクロでできれば幸いです。