• ベストアンサー

行列集計マクロ

データ量が多いためできれば、マクロで処理したいと思っています。どなたか教示お願いします。 月毎に行と列の「合計」のセル位置が変動するため、「合計」と表示されたセルの欄に行と列の合計を表示させたい。   A      B   C   D ・・・ R 1担当/商品 ア  イ   ウ   合計 2 い     200     850   8500 3 ろ         500       2000 4 は    1000     765   98571 98合計   8950 7000 9582

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

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

マクロは、こんな感じかな。ただし、A列と1行にそれぞれ「合計」の文字列が入力されていることが前提。 Sub Macro1() Dim ttl_row As Integer, ttl_col As Integer ttl_row = Range("A:A").Find("合計").Row ttl_col = Range("1:1").Find("合計").Column '縦集計 Range(Cells(ttl_row, 2), Cells(ttl_row, ttl_col - 1)).FormulaR1C1 = "=SUM(R2C:R[-1]C)" '横集計 Range(Cells(2, ttl_col), Cells(ttl_row - 1, ttl_col)).FormulaR1C1 = "=SUM(RC2:RC[-1])" End Sub さらに、以下のマクロを使うと、全シートで集計が行われます。 Sub Macro2() Dim ws As Worksheet For Each ws In Worksheets ws.Activate Macro1 Next End Sub

blackcat77
質問者

お礼

回答ありがとうございました。早速、試したところうまくいきました。感謝感激です。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 その表を見る限りは、マクロは必要ないと思います。 計算するデータ行列の範囲よりも、一回り大きく取って(合計の部分の行と列)、Σをクリックすればよいです。 '------------------------------------------- 'まあ、マクロなら、合計欄とか関係なく、CurrentRegion で範囲を取れるなら、以下でよいと思います。 '標準モジュール Sub Test1() With ActiveSheet.Range("A1").CurrentRegion.Offset(1, 1)  With .Resize(.Rows.Count - 1, .Columns.Count - 1)    .Select '*    If MsgBox("これでよいですか?", vbQuestion + vbOKCancel) = vbCancel Then Exit Sub '*    .Rows(.Rows.Count).Formula = "=SUM(R2C:R[-1]C)"    .Columns(.Columns.Count).Formula = "=SUM(RC2:RC[-1])"   End With End With End Sub うまく範囲が拾えるなら、* の行は削除してよいです。ダメなら、合計を探さなくてはなりません。 なお、Formula プロパティは、特に、R1C1 と A1 の区別がありません。

blackcat77
質問者

お礼

マクロを使用しないで、こんな方法で集計できることに驚きました。回答ありがとうございました。

関連するQ&A