• 締切済み

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

みんなの回答

  • goo793ww
  • ベストアンサー率80% (8/10)
回答No.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

noname#240857
質問者

お礼

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

回答No.1

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