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

无法用SUMIF实现特定条件求和,寻求VBA解决方案

解决A列含“owners”行的E列与上一行E列求和问题

问题分析

你之前用SUMIF公式和VBA代码只返回上一行E列值,核心原因是SumIf的逻辑是条件区域的每个单元格对应求和区域的同位置单元格,当条件匹配时仅累加求和区域中对应位置的值,无法实现“匹配行E列+上一行E列”的自定义求和逻辑,必须通过遍历行的VBA来处理。

修正后的VBA代码

以下代码会自动遍历所有有数据的行,检查A列是否包含“owners”(不区分大小写),符合条件时计算当前行E列与上一行E列的和,并将结果写入对应行的上方单元格(示例写入G列,可按需修改):

Sub SumOwnerRows()
    Dim lastRow As Long
    Dim i As Long
    
    ' 获取A列最后一行的行号,避免遍历空行
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    ' 从第2行开始遍历(第1行没有上一行)
    For i = 2 To lastRow
        ' 检查当前行A列是否包含"owners"(不区分大小写)
        If LCase(Cells(i, "A").Value) Like "*owners*" Then
            ' 求和结果写入当前行上方的G列(i-1行G列)
            Cells(i - 1, "G").Value = Cells(i - 1, "E").Value + Cells(i, "E").Value
        End If
    Next i
End Sub

代码说明

  • lastRow = Cells(Rows.Count, "A").End(xlUp).Row:自动定位A列最后一个有数据的行,避免无效遍历
  • LCase(Cells(i, "A").Value) Like "*owners*":统一转为小写后匹配,确保"Owners"、"OWNERS"等变体都能被识别
  • Cells(i - 1, "G").Value = ...:将求和结果写入匹配行的上一行G列,若要修改目标列,把"G"换成你需要的列名(如"H")或列号(如7对应G列)即可

可选调整

  • 若需要严格区分大小写,删除LCase(),直接用Cells(i, "A").Value Like "*owners*"
  • 若要将结果写入匹配行上方的其他位置,修改Cells(i - 1, "G")中的列标识即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:39:27