返回列表 上一主題 發帖

[發問] 2個條件的加總

[發問] 2個條件的加總

請問各位高手,

我要將原始資料裡依類別與日期這兩個條件將金額加總到"總表",例如:1/1~1/31, A類金額加總後放到B4儲存格,2/1~2/28, A類金額加總後放到C4儲存格,3/1~3/31, A類金額加總後放到D4儲存格..以此類推
原本使用工作表函數SUMPRODUCT, 但資料量多時,工作表run重新計算會花很多時間, 想改用VBA方式.
但我只會用下列寫法,發現這樣寫法要寫很多的IF判斷,想請問各位高手 提供較好的寫法.感謝!

Private Sub CommandButton2_Click()
Dim rowcnt As Integer
Dim i As Integer
Dim sum_A_1, sum_A_2, sum_A_3,sum_A_4,sum_A_5,sum_A_6,sum_A_7,sum_A_8,sum_A_9,sum_A_10,sum_A_11,sum_A_12 As Variant
sum_A_1= 0 '統計A類1月份金額
sum_A_2= 0 '統計A類2月份金額
sum_A_3= 0 '統計A類3月份金額
sum_A_4= 0 '統計A類4月份金額
sum_A_5= 0 '統計A類5月份金額

Sheets("原始資料").Activate
With Sheets("原始資料")
rowcnt= .Cells(1, 1).CurrentRegion.Rows.Count

For i = 1 To rowcnt
    '加總A類一月份金額
    If .Cells(i,2) >= "2013/1/1"And .Cells(i, 2) <= "2013/1/31" And .Cells(i,1) = Sheets("總表").Range("A4") Then
        sum_A_1= sum_A_1 + (Cells(i, 3).Value)
        Sheets("總表").Range("B4") = sum_A_1
    End If
   '加總A類二月份金額
     If .Cells(i,2) >= "2013/2/1"And .Cells(i, 2) <= "2013/2/28" And .Cells(i,1) = Sheets("總表").Range("A4") Then
        sum_A_2= sum_A_2+ (Cells(i, 3).Value)
        Sheets("總表").Range("C4") = sum_A_2   
     End If
Next

End With
End Sub

圖二.jpg (59.32 KB)

圖二.jpg

learner

回復 2# kimbal
謝謝kimbal.
但出現執行階段錯誤’13’: 型態不符合
偵錯在: With Sheets("總表").Cells(lngVlookupRow, lngCurrenMonth + 1) '放數據到總表上
learner

TOP

回復 9# c_c_lai


   謝謝 c_c_lai,
   可以使用了, 感謝~
  再請問一下,   
.Cells(lngVlookupRow, Chr(79 + Int(lngCurrenMonth / 3.2))) = .Cells(lngVlookupRow, Chr(79 + Int(lngCurrenMonth / 3.2))) + lngCurrValue  '

除以3.2 的作用是什麼?
learner

TOP

回復 4# stillfish00


    謝謝stillfish00, 因這檔案不只我使用, 所以希望能夠自動加總.已得到解答了,感謝!
learner

TOP

回復 5# sunnyso


    謝謝sunnyso, 試過你所提的SUMIFS, 可以使用.感謝!
learner

TOP

回復 6# kimbal


    c_c_lai 提供的程式碼已可以使用了,謝謝!
    而sunnyso所提的SUMIFS確實也是一個方法.
learner

TOP

回復 15# c_c_lai

謝謝詳細說明
learner

TOP

回復 14# sunnyso

目前累積資料是700筆左右, 到年底應該會有2000筆.
本來只知道SUMIF 函數, 但SUMIF函數只限用於單一條件, 謝謝提供SUMIFS.
但SUMIFS應該是2010版本才有的函數.
learner

TOP

回復 16# sunnyso

請問: 程式碼中...Array("A類", "B類", "C類", "D類", "E類", "F類", "G類", "H類", "I類", "J類")
即若採用陣列,  就是當有新的類別項目時, 就需修改程式碼,例如:日後可能新增K類時, 就需修改程式是嗎?
那採用陣列方式就會受限制,是否有別的方式呢?
learner

TOP

        靜思自在 : 好事要提得起,是非要放得下,成就別人即是成就自己。
返回列表 上一主題