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

VBA数组条件SUMIFS循环求和异常问题求助

问题排查与代码修正

核心问题分析

你的代码出现重复输出的原因是循环结构逻辑错误:

  • 内层For i循环(遍历criteria数组)每次循环都执行结果写入和k自增操作,导致每个跟踪号对应输出2次结果(数组含2个元素)
  • TrackingNumber仅初始化时赋值一次,后续循环未更新,所有行使用同一个跟踪号
  • For j循环的固定范围(3到50)未对应VBA表中跟踪号的实际行数,逻辑冗余

修正后的代码

Sub SumIfsMultipleCriteria()
    Dim sumRange As Range
    Dim criteriaRange1 As Range
    Dim criteriaRange2 As Range
    Dim Result As Double
    Dim i As Integer
    Dim k As Long
    Dim TrackingNumber As String
    Dim criteria As Variant
    Dim wsRaw As Worksheet
    Dim wsVBA As Worksheet
    
    ' 定义工作表对象,减少重复调用开销
    Set wsRaw = ThisWorkbook.Sheets("UPS_All Raw Data Combined")
    Set wsVBA = ThisWorkbook.Sheets("VBA")
    
    ' 动态获取主表数据最后一行,避免固定行数限制
    Dim lastRowRaw As Long
    lastRowRaw = wsRaw.Cells(wsRaw.Rows.Count, "N").End(xlUp).Row
    Set sumRange = wsRaw.Range("BA3:BA" & lastRowRaw)
    Set criteriaRange1 = wsRaw.Range("N3:N" & lastRowRaw)
    Set criteriaRange2 = wsRaw.Range("AT3:AT" & lastRowRaw)
    
    criteria = Array("Ground Residential", "Ground Commercial")
    k = 1 ' 从VBA表第2行开始输出结果
    
    ' 遍历VBA表I列所有跟踪号,直到空行终止
    Do While wsVBA.Range("I" & k + 1).Value <> ""
        TrackingNumber = wsVBA.Range("I" & k + 1).Value
        ' 若需模糊匹配跟踪号,取消下一行注释:
        ' TrackingNumber = "*" & TrackingNumber & "*"
        
        Result = 0 ' 每次计算前重置结果
        ' 累加所有符合条件的金额
        For i = 0 To UBound(criteria)
            Result = Result + WorksheetFunction.SumIfs(sumRange, _
                criteriaRange1, TrackingNumber, _
                criteriaRange2, criteria(i))
        Next i
        
        ' 所有条件计算完成后,仅写入一次结果
        wsVBA.Range("C" & k + 1).Value = Result
        k = k + 1
    Loop
End Sub

关键优化点

  • 调整循环逻辑:每个跟踪号仅在完成所有criteria的金额累加后,写入一次结果,彻底解决重复输出问题
  • 动态获取数据范围,避免固定行数导致的遗漏或无效循环
  • 新增空行判断,自动遍历完所有跟踪号,无需手动指定循环范围
  • 引入工作表对象,提升代码执行效率与可读性

内容的提问来源于stack exchange,提问作者Jay Love

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 21:48:32