- ベストアンサー
行列集計マクロ
データ量が多いためできれば、マクロで処理したいと思っています。どなたか教示お願いします。 月毎に行と列の「合計」のセル位置が変動するため、「合計」と表示されたセルの欄に行と列の合計を表示させたい。 A B C D ・・・ R 1担当/商品 ア イ ウ 合計 2 い 200 850 8500 3 ろ 500 2000 4 は 1000 765 98571 98合計 8950 7000 9582
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
マクロは、こんな感じかな。ただし、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
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 その表を見る限りは、マクロは必要ないと思います。 計算するデータ行列の範囲よりも、一回り大きく取って(合計の部分の行と列)、Σをクリックすればよいです。 '------------------------------------------- 'まあ、マクロなら、合計欄とか関係なく、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 の区別がありません。
お礼
マクロを使用しないで、こんな方法で集計できることに驚きました。回答ありがとうございました。
お礼
回答ありがとうございました。早速、試したところうまくいきました。感謝感激です。