Excel公式修改需求:按指定时段统计工作日水果销量(含当日)
Excel每日水果销量统计公式修改方案
针对你提出的四个需求,以下是修改后的公式及说明,解决原公式无法运行、未包含当日、不响应时段菜单等问题:
通用版公式(适配自定义时段起始/结束)
假设:
- 数据源表为
HubLog,日期时间列是Date,销量列是Qty - 时段起始时间存于单元格
$D$1(如TIME(0,0,0)),时段结束时间存于$D$2(如TIME(12,0,0))
=LET( 数据源日期, HubLog[Date], 数据源销量, HubLog[Qty], 时段起始, $D$1, 时段结束, $D$2, 最小日期, INT(MIN(数据源日期)), 最大日期, MAX(INT(MAX(数据源日期)), TODAY()), 日期序列, SEQUENCE(最大日期 - 最小日期 + 1,, 最小日期), 工作日序列, FILTER(日期序列, WEEKDAY(日期序列, 2) < 6), 每日销量, MAP(工作日序列, LAMBDA(当日, SUMIFS( 数据源销量, 数据源日期, ">=" & 当日 + 时段起始, 数据源日期, "<=" & 当日 + 时段结束, 数据源日期, "<=" & TODAY() + 时段结束 ) )), 结果集, CHOOSE({1,2}, 工作日序列, 每日销量), FILTER(结果集, INDEX(结果集,,2) > 0) )
下拉菜单版公式(适配预设时段选择)
如果你的时段是通过下拉菜单(如"全天"、"上午"、"下午"、"晚上")选择,用这个版本:
假设下拉菜单存于$D$1:
=LET( 数据源日期, HubLog[Date], 数据源销量, HubLog[Qty], 时段选择, $D$1, 时段参数, SWITCH(时段选择, "全天", {TIME(0,0,0), TIME(23,59,59)}, "上午", {TIME(0,0,0), TIME(11,59,59)}, "下午", {TIME(12,0,0), TIME(17,59,59)}, "晚上", {TIME(18,0,0), TIME(23,59,59)}, {TIME(0,0,0), TIME(23,59,59)} ), 时段起始, INDEX(时段参数,1), 时段结束, INDEX(时段参数,2), 最小日期, INT(MIN(数据源日期)), 最大日期, MAX(INT(MAX(数据源日期)), TODAY()), 日期序列, SEQUENCE(最大日期 - 最小日期 + 1,, 最小日期), 工作日序列, FILTER(日期序列, WEEKDAY(日期序列, 2) < 6), 每日销量, MAP(工作日序列, LAMBDA(当日, SUMIFS( 数据源销量, 数据源日期, ">=" & 当日 + 时段起始, 数据源日期, "<=" & 当日 + 时段结束, 数据源日期, "<=" & TODAY() + 时段结束 ) )), 结果集, CHOOSE({1,2}, 工作日序列, 每日销量), FILTER(结果集, INDEX(结果集,,2) > 0) )
需求对应实现说明
- 包含当日数据:通过
MAX(INT(MAX(数据源日期)), TODAY())强制将当前日期纳入统计范围,即使数据源中暂无当日数据,后续过滤0销量时会自动剔除无数据的日期。 - 排除周末:使用
WEEKDAY(日期序列, 2) < 6,参数2定义周一为1、周日为7,<6即仅保留周一至周五的日期。 - 响应时段选择:通过
时段起始和时段结束参数限定统计的时间范围,SUMIFS精准匹配当日对应时段的销量数据,额外添加<= TODAY() + 时段结束避免统计未来时段的无效数据。 - 不显示销量为0的日期:最终用
FILTER(结果集, INDEX(结果集,,2) > 0)过滤掉销量为0的行,只保留有销量的工作日。
内容的提问来源于stack exchange,提问作者Verminous
相关产品推荐
相关产品推荐

