- 帖子
- 4901
- 主題
- 44
- 精華
- 24
- 積分
- 4916
- 點名
- 148
- 作業系統
- Windows 7
- 軟體版本
- Office 20xx
- 閱讀權限
- 150
- 性別
- 男
- 來自
- 台北
- 註冊時間
- 2010-4-30
- 最後登錄
- 2025-6-19
               
|
4#
發表於 2011-12-25 10:28
| 只看該作者
本帖最後由 Hsieh 於 2011-12-25 16:13 編輯
回復 1# idsmchow
這個問題在2007版本以後就很簡單用SUMIFS函數錄製巨集即可
2003版就寫個多條件加總函數來運用
一般模組- Function SumIIF(SumRange As Range, ParamArray OtherArgs())'多條件加總函數,可直接運用到儲存格
- '語法:SumIIF(SumRange,準則1,準則範圍1,準則2,準則範圍2,準則3,準則範圍3...準則n,準則範圍n)
- '準則範圍大小必須與SumRange範圍大小相同
- Dim mystr$, temp$
- Set dic = CreateObject("Scripting.Dictionary")
- For i = LBound(OtherArgs) To UBound(OtherArgs) Step 2
- If mystr = "" Then mystr = OtherArgs(i) Else mystr = mystr & OtherArgs(i)
- dic(i + 1) = ""
- Next
- For i = 1 To SumRange.Count
- For Each ky In dic.keys
- If temp = "" Then temp = OtherArgs(ky)(i) Else temp = temp & OtherArgs(ky)(i)
- Next
- If temp = mystr Then SumIIF = SumIIF + SumRange(i)
- temp = ""
- Next
- End Function
- Sub ex()'主程式
- Dim Sr As Range
- With Sheets("Data")
- Set Sr = .Range("C2", .[C2].End(xlDown))
- Set cr1 = .Range("A2").Resize(Sr.Count, 1)
- Set cr2 = .Range("B2").Resize(Sr.Count, 1)
- End With
- With Sheets("Report")
- For Each c In .[E8:F8]
- For Each a In .Range("A:A").SpecialCells(xlCellTypeConstants)
- If a = "Y" Then .Cells(a.Row, c.Column) = SumIIF(Sr, c, cr1, a.Offset(, 1), cr2)
- Next
- Next
- End With
- End Sub
複製代碼
formular.rar (11.79 KB)
|
|