こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

ExcelVBAでデータの値を集計する(長文です)

ExcelのVBAについて教えて下さい。
 A    B   C   D   E F  G
1 4月 5月 6月 ・・・
2みかん 30
3りんご 55
4ぶどう 45

1つのbookにシートが20ほどあり全て同じ表で出来ています。シートは増える可能性があります。
それぞれのシートのセルB2やB3の合計を集計シートのB2やB3に出したいです。

Sub テスト()
with Worksheet("集計")
.Range("B2:R25").ClearContents
.Range("B2").Consolidate
Sourcces:=Array("'[Book1]経理"!R2C2:R50C50")_
Function:=xlSum,
TopRow:=Flase, LeftColumn:=False,_
End With
End Sub

上記のVBAで合計値を出すことが出来たのですが、合計するシート名を指定していたら、「行継続文字列を使い過ぎ」とエラーメッセージがでてしまいました。
そこで、シート5とシート12を除いたシートの合計値を集計シートにだすVBAを教えて下さい。

質問が分かり辛く、長文になってしまいしたがよろしくお願いいたします。

投稿日時 - 2013-04-04 21:17:21

QNo.8027372

すぐに回答ほしいです

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

変数datに各シートのセル値をfor~nextで集計する方法としています。
ActiveWorkbook.Sheets.Countでシート数を取得しますので、今後シート数が増加しても利用出来るようにしていますが、集計シートは必ず左から1番目に移動させて下さい。左から2番目のシートから最終シートを集計するようにしています。
但し、左から5番目、12番目のシートはIf k = 5 Or k = 12 Then k = k + 1集計しないようにしています。集計シートを移動させる事により順番が変わる場合はIf k = 5 Or k = 12の数値を変更して下さい。
集計範囲はRange("B2:R25")としています。経理"!R2C2:R50C50")の行も列も50であるのであれば下記VBAの25、18のデータを全て50に変更して下さい。


Sub test()
Dim i, j, k As Integer
Dim dat(25, 18) As Long

'変数datの2次元配列に0入力
For i = 1 To 25
For j = 1 To 18
dat(i, j) = 0
Next
Next

'1番左は集計シート、2番目シートから最終シートまで集計
For k = 2 To ActiveWorkbook.Sheets.Count

'左から5番目、12番目は次シートにスキップ
If k = 5 Or k = 12 Then k = k + 1

For i = 2 To 25
For j = 2 To 18
dat(i, j) = dat(i, j) + Sheets(k).Cells(i, j)
Next
Next
Next


For i = 2 To 25
For j = 2 To 18
Sheets("集計").Cells(i, j) = dat(i, j)
Next
Next


End Sub

投稿日時 - 2013-04-04 23:19:04

お礼

お返事が遅くなりました。
解決いたしまいた。ありがとうございます。
大変わかりやすくご回答いただきありがとうございます。
とても勉強になりました。

投稿日時 - 2013-04-05 20:21:20

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問