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

如何在Excel中实现无销售日工时结转及符合条件连续行部分和计算

一、计算满足条件的连续行部分和公式

以下是两种常见场景的公式实现:

场景1:计算当前行向上连续满足条件的数值和

假设A列为条件列(如产品类别),B列为数值列(如销量),要计算从当前行向上连续等于“苹果”的B列数值和:

=SUM(OFFSET(B2, 0, 0, -MATCH(FALSE, A$2:A2="苹果", 0)+1, 1))
  • 逻辑:MATCH(FALSE, A$2:A2="苹果", 0)定位第一个不满足条件的行位置,OFFSET确定求和范围,SUM计算总和。

场景2:批量计算所有连续满足条件区块的和(Excel 365/2021)

若需一次性生成所有连续满足条件的区块和,使用动态数组公式:

=LET(
    数值列, B:B,
    条件列, A:A="苹果",
    连续组标识, SCAN(0, 条件列, LAMBDA(累计值, 当前条件, IF(当前条件, 累计值+1, 0))),
    结果, BYROW(连续组标识, LAMBDA(组号, IF(组号>0, SUM(OFFSET(数值列, -组号+1, 0, 组号, 1)), 0)))
)
  • 逻辑:SCAN生成连续满足条件的组序号,BYROW遍历每个组号,计算对应范围的数值和。
二、无销售日期工时结转至下一日的实现

需求说明

当某日期对应的产品销量为0时,将当日工时结转至下一个有销量的日期,仅在有销量的日期显示累计工时。

实现方案(Excel 365/2021 动态数组版)

假设A列为日期,B列为当日工时,C列为销量,在空白列(如E列)输入以下公式:

=LET(
    日期列, A:A,
    工时列, B:B,
    销量列, C:C,
    有效行号, FILTER(ROW(日期列), 销量列>0),
    结转结果, BYROW(ROW(日期列), LAMBDA(当前行号,
        IF(ISNUMBER(MATCH(当前行号, 有效行号, 0)),
            SUM(INDEX(工时列, IFERROR(MAX(FILTER(有效行号, 有效行号<当前行号)), 1)):INDEX(工时列, 当前行号)),
            0
        )
    )),
    结转结果
)
  • 逻辑:FILTER筛选所有有销量的行号;BYROW遍历每一行,若为有效行(有销量),则计算从上一个有效行到当前行的工时总和,否则返回0。

旧版Excel 数组公式实现(需按Ctrl+Shift+Enter确认)

在E2单元格输入以下公式,下拉填充:

=IF(C2>0,SUM(OFFSET(B$1,MAX(IF(C$1:C1>0,ROW(C$1:C1),0)),0,ROW()-MAX(IF(C$1:C1>0,ROW(C$1:C1),0)),1)),0)

示例表格

工时结转示例
表格说明:1/2日销量为0,当日2小时工时结转至1/3日,因此1/3日的结转后工时为3+2=5;1/5日销量为0,工时1结转至1/6日,1/6日结转后工时为4+1=5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:18:20