返回列表 上一主題 發帖

[發問] 2個條件的加總

回復 13# yliu
VBA用loop來做條件加總的效率並不會比SUMPRODUCT高

你的資料有多少筆?
ss

TOP

回復 6# kimbal


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

TOP

回復 5# sunnyso


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

TOP

回復 4# stillfish00


    謝謝stillfish00, 因這檔案不只我使用, 所以希望能夠自動加總.已得到解答了,感謝!
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

如附件:
兩個條件的加總.rar (20.85 KB)

TOP

本帖最後由 c_c_lai 於 2013-5-31 19:55 編輯

請將 4 改成 3.2
  1.                     .Cells(lngVlookupRow, Chr(79 + Int(lngCurrenMonth / 3.2))) = .Cells(lngVlookupRow, Chr(79 + Int(lngCurrenMonth /3.2))) + lngCurrValue
複製代碼

TOP

回復  kimbal
謝謝kimbal.
但出現執行階段錯誤’13’: 型態不符合
偵錯在: With Sheets("總表").Cells( ...
yliu 發表於 2013-5-31 12:30

回復 2# kimbal
不好意思,我稍微添加了幾行,希望您等能笑納!
  1. Private Sub Ex()
  2.     Dim rowcnt As Long, i As Long
  3.     Dim lngVlookupRow As Long, lngCurrenMonth As Long, lngCurrValue As Long

  4.     Application.ScreenUpdating = False
  5.     Application.Calculation = xlCalculationManual

  6.     '  清理舊數據
  7.     Sheets("總表").Activate
  8.     Sheets("總表").Range("A3").CurrentRegion.Offset(1, 1).Clear


  9.     Sheets("原始資料").Activate
  10.     With Sheets("原始資料")
  11.         rowcnt = .Cells(1, 1).CurrentRegion.Rows.Count
  12.         For i = 2 To rowcnt
  13.             lngCurrenMonth = 0
  14.             If IsDate(.Cells(i, 2)) Then
  15.                 lngCurrenMonth = Month(.Cells(i, 2))                                               '  當行月份
  16.             End If
  17.             
  18.             If lngCurrenMonth > 0 And Not (IsError(Application.Match(.Cells(i, 1), Sheets("總表").Range("A:A"), 0))) Then
  19.                 lngVlookupRow = Application.Match(.Cells(i, 1), Sheets("總表").Range("A:A"), 0)    '  當行類型在總表行數
  20.                 lngCurrValue = .Cells(i, 3)
  21.                 With Sheets("總表")
  22.                     .Cells(lngVlookupRow, lngCurrenMonth + 1).Value = .Cells(lngVlookupRow, lngCurrenMonth + 1).Value + lngCurrValue                       '  放數據到總表上
  23.                     .Cells(lngVlookupRow, "N") = .Cells(lngVlookupRow, "N") + lngCurrValue
  24.                     .Cells(lngVlookupRow, Chr(79 + Int(lngCurrenMonth / 4))) = .Cells(lngVlookupRow, Chr(79 + Int(lngCurrenMonth / 4))) + lngCurrValue
  25.                 End With
  26.             End If
  27.         Next
  28.     End With
  29.    
  30.     With Sheets("總表")
  31.         rowcnt = .[A3].End(xlDown).Row
  32.         For i = 2 To 18
  33.             .Cells(rowcnt, i) = WorksheetFunction.Sum(.Range(Chr(64 + i) & 4 & ":" & Chr(64 + i) & (rowcnt - 1)))
  34.         Next i
  35.     End With
  36.    
  37.     Application.Calculation = xlCalculationAutomatic
  38.     Application.ScreenUpdating = True
  39. End Sub
複製代碼

TOP

回復 3# yliu


    可否提供一下EXCEL?

另外也會建議用PIVOTTABLE 和SUMIFS
VBA LOOP很多情況也是比公式慢的.
懂得發問,答案就會在其中

今日の一秒は  明日にない
http://kimbalko-chi.blogspot.com
http://kimbalko.blogspot.com

TOP

回復 1# yliu

可以考慮用 SUMIFS 來代替 SUMPRODUCT, 因爲SUMIFS更有效率
ss

TOP

        靜思自在 : 看別人不順眼,是自己修養不夠。
返回列表 上一主題