如何对 Excel 行进行求和,直到出现下一个项目

如何对 Excel 行进行求和,直到出现下一个项目

我有一张如下所示的表格:

X
名称01 0
某某 价值
某某某 价值
名称02 0
某某 价值
名称03 0
某某 价值
某某某 价值
某某 价值

我想按 NameX 对 Y 值进行分组求和:

X
名称01 价值观01
名称02 价值观02
名称03 价值观03

怎么做?问题是每个“姓名”的行数各不相同

答案1

当然,借助附加(辅助)列和几个不太复杂的公式或借助 PowerQuery(在现代版本的 Excel 中的“数据”选项卡上),可以轻松解决此任务。但是,老派(非常老派)认为,如果您知道如何手动解决问题,则可以教 VBA 为您解决问题。

用户定义函数 (UDF)并不是很复杂,编写它所需的按钮点击次数并不比构建公式多多少,而且结果是一样的:

Option Explicit

Function sumByGroup(aSource As Range, Optional markAsName As String = "_") As Variant
Dim aData As Variant
Dim aResult As Variant
Dim i As Long, k As Long
Rem Get data from source range:
    aData = aSource.Value2
Rem Prepare and clear result array:
    ReDim aResult(1 To UBound(aData, 1), 1 To 2)
    For i = 1 To UBound(aData, 1)
        aResult(i, 1) = "": aResult(i, 2) = ""
    Next i
Rem Fill result array:
    k = 1
    aResult(k, 1) = aData(1, 1): aResult(k, 2) = aData(1, 2)
    For i = 2 To UBound(aData, 1)
        If InStr(aData(i, 1), markAsName) Then
            k = k + 1
            aResult(k, 1) = aData(i, 1): aResult(k, 2) = 0
        Else
            aResult(k, 2) = aResult(k, 2) + aData(i, 2)
        End If
    Next i
    sumByGroup = aResult
End Function

演示结果

答案2

反向累加器:

有很多方法可以使用复杂的 sumif 和数组公式来实现这一点,但我更喜欢用传统方法来解决这类问题。

从最后一行(例如第 99 行)开始,进入新列(例如 C 列)。因此 C99 是

=IF(B100=0,B99,C100+B99)

现在将此公式复制并粘贴到顶部。如果需要,请对所有 B=0 行运行过滤器。

编辑:

您可以更改 IF 条件以根据合格标准(例如下划线)直接检测名称类别,并将相应的 Y 列保留为空字符串“”而不是零。

然后更进一步,将中间的数字作为负数求和,并使用条件格式将负数涂白,这样你就可以获得一个很好的会计分类汇总风格。

相关内容