You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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)

优化需求与错误尝试

需要对代码做两处优化:

  1. Transactions工作表的数据区域自动取到最后一行(不再固定为53行)
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 03:21:01