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

締切り済みの質問

excel vba sumif 月間集計

excel vba sumif 月間集計
どなたか教えていただけますか?
sheet1に1日毎のデータが打ち込まれています。そのデータを同じブック内の月間シートが開いたときに表示してるのですが、31日間分のコードをsumifで処理しているため、かなりのファイル容量となり重くなります。もっと効率的な方法はないのでしょうか、(範囲指定の繰り返し処理等)お願いいたします。

なお、sheet1からsheet5まで日毎のデータをそれぞれ月間シート1~5に集計してます。

例です。
sheet1は
  A    B     C    D     E   F・・・・
1 日  目的  距離  燃料
2 1   社用  50
3 1   私用  60   10 
4 2   社用  30


月間シート1は
  A   B   C   D E    F
1 日  距離  燃料       1110
2 1  110    10
3 2   30     0 

Private Sub Worksheet_Activate()
UserForm1.Hide
Range("A1").Select

'距離数
Range("B2").Value = WorksheetFunction.SumIf(Sheets("Sheet1").Range("A2:A300"),   Range("A2"), Sheets("Sheet1").Range("C2:C300"))
  Range("B3").Value = WorksheetFunction.SumIf(Sheets("Sheet1").Range("A2:A300"),   Range("A3"), Sheets("Sheet1").Range("C2:C300"))
     ・
     ・
     ・
'累計 ・・・は、こんな感じ処理してます
Dim myRng As Range
Dim c As Range
Set myRng = Range("F2:F32")
For Each c In myRng
c.Value = c.Offset(0, -4).Value + c.Offset(-1, 0).Value
 Next c

 End Sub

投稿日時 - 2010-03-25 13:53:33

QNo.5778251

困ってます

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

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

回答(2)

ANo.2

【回答】これでどうかな?
以下をモジュールシートに貼り付けて試行してみて下さい。

Sub 集計new()
Dim mySheet As String
Dim LastRow As Long
Dim myRng As Range
Dim c As Range

Sheets("月間シート1").Select
mySheet = "Sheet1"

'集計領域の初期化
Range("B2:F32").ClearContents

'最終行取得
LastRow = Worksheets(mySheet).Cells(Rows.Count, 1).End(xlUp).Row

'距離数
Set myRng = Range("B2:B32")
For Each c In myRng
'Range("B2").Value = WorksheetFunction.SumIf(Sheets(mySheet).Range("A2:A300"), Range("A2"), Sheets(mySheet).Range("C2:C300"))
c.Value = WorksheetFunction.SumIf(Sheets(mySheet).Range("A2:A" & LastRow), c.Offset(0, -1).Value, Sheets(mySheet).Range("C2:C" & LastRow))
Next c

'距離数累計
Set myRng = Range("F2:F32")
For Each c In myRng
c.Value = c.Offset(0, -4).Value + c.Offset(-1, 0).Value
Next c

MsgBox "●集計が完了しました。"
Range("A1").Select
End Sub

投稿日時 - 2010-03-26 04:34:35

お礼

goo793ww様、お忙しい中ご回答いただきましてありがとうございます。
これを参考にしてみます。

投稿日時 - 2010-03-28 14:10:40

ANo.1

はじめまして、通りすがると申します。
上記ご質問の件なのですが、上記月別累計の内容はvbaでなく
EXCELの集計機能を利用すると同じ内容が得られると思います。
集計した内容を、フィルタリングで抽出しコピー&ペースト
して、別シートへ値のみ貼りつけるとあっという間にできて
しまうと思いますけど..
無理にvbaで作成しようとしているため、作業が複雑になって
いるように思います。

投稿日時 - 2010-03-25 14:49:33

あなたにオススメの質問