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

基于文本条件的动态求和范围设置及循环求和问题求助

解决方案:按「Faktura」分组动态求和(含日期限制)

一、函数式解决方案(无需VBA)

假设数据结构:

  • A列:Beskrivelse(含「Faktura」标识)
  • B列:日期(格式为dd/mm/yyyy)
  • C列:需要求和的数值列

步骤1:标记每组「Faktura」的起始行

在D2单元格输入公式,下拉填充至最后一行:

=IF(ISNUMBER(SEARCH("Faktura",A2)),MAX($D$1:D1)+1,D1)

该公式会为每一组「Faktura」分配唯一组号,自动完成分组标记。

步骤2:按组号+日期限制求和

在空白单元格(如E2)输入公式,下拉生成所有组的求和结果:

=IFERROR(SUMIFS(C:C,D:D,ROW(A1),B:B,"<="&DATE(2023,3,31)),"")
  • ROW(A1)会随下拉自动递增,对应第1、2、3...组
  • DATE(2023,3,31)可替换为指定结束日期的单元格引用(如$G$1)

步骤3:确保包含「Faktura」起始行(可选)

若需限定仅求和每组内包含「Faktura」且日期符合要求的行,修改公式为:

=IFERROR(SUMIFS(C:C,D:D,ROW(A1),B:B,"<="&DATE(2023,3,31),A:A,"*Faktura*"),"")

若组内非「Faktura」行也需纳入求和,去掉A列条件即可。

二、VBA批量处理方案(适合超5000行大规模数据)

函数下拉卡顿的话,用VBA效率更高:
按Alt+F11打开VBA编辑器,插入模块,粘贴以下代码:

Sub SumByFakturaGroup()
    Dim ws As Worksheet
    Dim lastRow As Long, i As Long, currentGroup As Long
    Dim endDate As Date
    Dim sumResult As Double
    
    Set ws = ThisWorkbook.ActiveSheet
    endDate = DateSerial(2023, 3, 31) ' 替换为你的结束日期
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    
    currentGroup = 0
    sumResult = 0
    
    For i = 2 To lastRow
        ' 遇到新Faktura组,输出上一组结果
        If InStr(ws.Cells(i, "A").Value, "Faktura") > 0 Then
            If currentGroup > 0 Then
                ws.Cells(ws.Rows.Count, "E").End(xlUp).Offset(1, 0).Value = sumResult
            End If
            currentGroup = currentGroup + 1
            sumResult = 0 ' 重置求和变量
        End If
        
        ' 日期符合要求则累加
        If ws.Cells(i, "B").Value <= endDate Then
            sumResult = sumResult + ws.Cells(i, "C").Value
        End If
    Next i
    
    ' 输出最后一组结果
    If currentGroup > 0 Then
        ws.Cells(ws.Rows.Count, "E").End(xlUp).Offset(1, 0).Value = sumResult
    End If
    
    MsgBox "分组求和完成!", vbInformation
End Sub

说明:

  • 可根据实际列号修改A(Beskrivelse列)、B(日期列)、C(求和列)的引用
  • 结束日期可改为ws.Range("G1").Value引用单元格中的日期
  • 结果默认输出到E列,可修改目标列标识(如"F")

三、细节优化

  • 若「Faktura」大小写不一致,函数用SEARCH(不区分大小写),VBA中替换为InStr(1, ws.Cells(i,"A").Value, "Faktura", vbTextCompare)
  • 数据含空行时,VBA中加入If ws.Cells(i,"A").Value <> "" Then跳过空行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:42:26