使用VBA SUMIFS结合最后一行与多工作表日期范围实现求和
问题与解决方案
需求说明
在VBA代码中使用三个工作表:Payment Entry、Transactions和Final Bill,需实现以下功能:
- 对Transactions工作表的B列求和
- 求和条件:
- Transactions的D列日期处于Payment Entry工作表指定的日期范围内
- Transactions的A列名称与Final Bill工作表B列的内容匹配
- 结果输出到Final Bill的E列
原固定行Excel公式
以下是单一行的正确Excel公式(Transactions数据行固定到53行):=SUMIFS(Transactions!B3:B53, Transactions!D3:D53, ">="&'Payment Entry'!L20:M20, Transactions!D3:D53, "<="&'Payment Entry'!O20:P20, Transactions!A3:A53, 'Final Bill'!B6)
优化需求与错误尝试
需要对代码做两处优化:
- Transactions工作表的数据区域自动取到最后一行(不再固定为53行)
- Final Bill的E列每一行对应自身所在行的B列内容进行匹配
尝试的VBA代码出现语法错误:
Dim final As Worksheet Dim database As Worksheet Dim payment As Worksheet Dim CLastFundRow As Integer Set final = ThisWorkbook.Sheets("Final Bill") Set database = ThisWorkbook.Sheets("Transactions") Set payment = ThisWorkbook.Sheets("Payment Entry") CLastFundRow = database.Range("A3").End(xlDown).Row final.Range("E6:E100").FormulaR1C1 =SUMIFS(database.range("B3:B" & CLastFundRow & ", database.Range("D3:D" & CLastFundRow & "), ">="& payment.Range("L20:M20"), database.Range("D3:D" & CLastFundRow & "), "<="&'payment.Range("O20:P20"), database("A3:A5" & CLastFundRow & "), final.range("B6")
正确的VBA实现代码
CLastFinRow = final.Range("B6").End(xlDown).Row final.Range("E6:E" & CLastFinRow).Formula2 = "=SUMIFS(Transactions!B$3:B$" & CLastFundRow & ", Transactions!D$3:D$" & CLastFundRow & ","">=""&'Payment Entry'!$L$20:$M$20, Transactions!D$3:D$" & CLastFundRow & ", ""<=""&'Payment Entry'!$O$20:$P$20, Transactions!A$3:A$" & CLastFundRow & ", 'Final Bill'!B6)"
内容的提问来源于stack exchange,提问作者Learning and Improving
相关产品推荐
相关产品推荐

