无法用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
相关产品推荐
相关产品推荐

