Excel 365中SEQUENCE结合IF动态调整步长的引用问题求助
解决方案
原公式的核心问题是SEQUENCE(荷兰语REEKS)的步长参数仅支持单一固定值,无法随序列项自动递增引用D8、D9、D10等单元格。要实现动态判断每一周的日期调整逻辑,需结合BYROW函数遍历每个基础日期,再匹配对应D列的单元格值。
英语版公式
=BYROW(SEQUENCE(54),LAMBDA(n,LET( start_date, DATE($B$6,1,1)-WEEKDAY(DATE($B$6,1,1),2)+1, base_monday, start_date+(n-1)*7, base_monday+IF(INDEX(D:D,ROW(D8)+n-1)="Y",1,0) )))
荷兰语版公式
=BYROW(REEKS(54);LAMBDA(n;LET( start_date; DATUM($B$6;1;1)-WEEKDAG(DATUM($B$6;1;1);2)+1; base_monday; start_date+(n-1)*7; base_monday+ALS(INDEX(D:D;RIJ(D8)+n-1)="Y";1;0) )))
公式说明
SEQUENCE(54)生成1到54的序号,对应一年最多54周;start_date计算指定年份的第一个周一;base_monday基于第一个周一,逐周生成后续的周一日期;INDEX(D:D,ROW(D8)+n-1)实现动态引用:n=1时指向D8,n=2时指向D9,依此类推;- 若D列对应单元格为
Y,则给基础周一日期加1(返回周二),否则保持周一。
简化版(无需LET函数)
英语版:
=BYROW(SEQUENCE(54,1,DATE($B$6,1,1)-WEEKDAY(DATE($B$6,1,1),2)+1,7),LAMBDA(x,x+IF(INDEX(D:D,ROW(D8)+(x-DATE($B$6,1,1)-WEEKDAY(DATE($B$6,1,1),2)+1)/7)="Y",1,0)))
荷兰语版:
=BYROW(REEKS(54;1;DATUM($B$6;1;1)-WEEKDAG(DATUM($B$6;1;1);2)+1;7);LAMBDA(x;x+ALS(INDEX(D:D;RIJ(D8)+(x-DATUM($B$6;1;1)-WEEKDAG(DATUM($B$6;1;1);2)+1)/7)="Y";1;0)))
内容的提问来源于stack exchange,提问作者Dimitri
相关产品推荐
相关产品推荐

