- 締切済み
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
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- goo793ww
- ベストアンサー率80% (8/10)
【回答】これでどうかな? 以下をモジュールシートに貼り付けて試行してみて下さい。 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
- ToOrisugaru
- ベストアンサー率28% (80/280)
はじめまして、通りすがると申します。 上記ご質問の件なのですが、上記月別累計の内容はvbaでなく EXCELの集計機能を利用すると同じ内容が得られると思います。 集計した内容を、フィルタリングで抽出しコピー&ペースト して、別シートへ値のみ貼りつけるとあっという間にできて しまうと思いますけど.. 無理にvbaで作成しようとしているため、作業が複雑になって いるように思います。
お礼
goo793ww様、お忙しい中ご回答いただきましてありがとうございます。 これを参考にしてみます。