Google Sheets公式优化:新增D列日期校验与未统计日期计数需求
解决方案
可以使用以下单个动态公式实现需求,支持F列及后续列的动态扩展,直接在C列首行输入即可自动填充整列:
=BYROW(A2:INDEX(A:A,COUNTA(A:A)),LAMBDA(r, LET( startDate,INDEX(r,1,1), endDate,INDEX(r,1,2), checkDate,INDEX(r,1,4), headers,FILTER(1:1,COLUMN(1:1)>=COLUMN(F1)), rowVals,INDEX(2:INDEX(2:2,COUNTA(A:A)),ROW(r)-1,0), // 原统计:表头日期在A-B区间且对应值为"Yes"的数量 originalCount,SUM(N((headers>=startDate)*(headers<=endDate)*(rowVals="Yes"))), // 新增统计:D列日期在A-B区间且对应列值为"No"的数量 addCount,N((checkDate>=startDate)*(checkDate<=endDate)*(XLOOKUP(checkDate,headers,rowVals,"")="No")), originalCount+addCount ) ))
公式说明
- 动态行范围:
A2:INDEX(A:A,COUNTA(A:A))自动识别A列有数据的所有行,避免计算空行 - 变量定义(LET函数):将重复引用的单元格/范围定义为变量,简化公式结构:
startDate/endDate:当前行的项目开始/截止日期(A/B列)checkDate:当前行需要校验的D列日期headers:动态获取F列及以后的所有表头日期(支持列扩展)rowVals:当前行F列及以后的所有对应值
- 原统计逻辑:通过布尔运算筛选出「表头在A-B区间」且「值为Yes」的单元格,用
N()将布尔结果转为1/0后求和 - 新增统计逻辑:先判断D列日期是否在A-B区间,再用
XLOOKUP匹配该日期对应的列值,若为"No"则计数1,否则0 - 结果合并:将原统计与新增统计的结果相加,得到最终预期值
内容的提问来源于stack exchange,提问作者DanCue
相关产品推荐
相关产品推荐

