如何使用SEQUENCE与FILTER函数生成指定规则的轮值排班日期
谷歌表格轮值排班日期生成解决方案
问题核心
你原有公式=SEQUENCE(B8,1,A5,A8*7)仅生成每隔指定轮值周数的「起始日当天」的日期序列,数据源仅包含起始日对应星期的日期,自然无法筛选出其他指定星期的结果。
可用公式(适配谷歌表格/Excel 365)
=SORT( LET( target_weekdays, XMATCH({"Thursday","Friday"},{"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"}), cycle_days, A8*7, first_valid, BYCOL(target_weekdays, LAMBDA(w, A5 + MOD(w - WEEKDAY(A5,2),7))), max_cycles, ROUNDUP((B5 - A5)/cycle_days,0)+1, all_dates, TOCOL(first_valid + SEQUENCE(max_cycles,1,0,cycle_days)), FILTER(all_dates, all_dates <= B5) ) )
参数说明
- 公式内
A5对应你表格中的开始日期单元格 - 公式内
B5对应你表格中的结束日期单元格 - 公式内
A8对应你表格中的轮值周数字段 - 公式内
{"Thursday","Friday"}可替换为你存放选定星期的单元格区域,例如你的选定星期存放在D2:D3区域,直接替换为D2:D3即可
验证结果
用你给出的示例参数计算,输出结果完全匹配需求:
06/01/22
07/01/22
10/02/22
11/02/22
07/03/22
08/03/22
内容的提问来源于stack exchange,提问作者Tom Bunn
相关产品推荐
相关产品推荐

