求Google Sheets中两日期间第一个星期三的公式及报错解决
查找Google Sheets中两个日期之间的第一个星期三
需求说明
需要编写Google Sheets公式,找出指定日期范围内的第一个星期三:
- 当范围是2023年1月5日至2023年1月11日时,结果为11日
- 当范围是2022年1月5日至2022年1月11日时,结果为5日
尝试过程及问题
- 生成日期范围内的序列公式:
=sequence(days(date(2023,1,11),date(2023,1,5))+1,1,date(2023,1,5))
- 用WEEKDAY判断日期是否为星期三(WEEKDAY返回值为4):
=weekday(sequence(days(date(2023,1,11),date(2023,1,5))+1,1,date(2023,1,5)))=4
- 整合到FILTER函数时触发报错:
=filter(sequence(days(date(2023,1,11),date(2023,1,5))+1,1,date(2023,1,5)),weekday(sequence(days(date(2023,1,11),date(2023,1,5))+1,1,date(2023,1,5)))=4,1,1)
报错信息:FILTER has mismatched range sizes. Expected row count: 7, column count: 1. Actual row count: 1, column count: 1.
- 期望的最终公式(未解决报错):
=to_date(index(filter(sequence(days(date(2023,1,11),date(2023,1,5))+1,1,date(2023,1,5)),weekday(sequence(days(date(2023,1,11),date(2023,1,5))+1,1,date(2023,1,5)))=4,1,1)))
解决方案
报错原因
FILTER函数末尾的,1,1是多余的筛选条件,这两个单个值和日期序列的7行范围大小不匹配,导致触发范围尺寸错误。
修正后的公式
简化版(使用LET避免重复计算)
=LET( start_date, DATE(2023,1,5), end_date, DATE(2023,1,11), date_seq, SEQUENCE(DAYS(end_date, start_date)+1, 1, start_date), TO_DATE(INDEX(FILTER(date_seq, WEEKDAY(date_seq)=4), 1)) )
直接修正原公式
=TO_DATE(INDEX(FILTER(SEQUENCE(DAYS(DATE(2023,1,11),DATE(2023,1,5))+1,1,DATE(2023,1,5)),WEEKDAY(SEQUENCE(DAYS(DATE(2023,1,11),DATE(2023,1,5))+1,1,DATE(2023,1,5)))=4),1))
公式说明
- 移除FILTER函数中多余的
,1,1参数,确保筛选条件和目标序列的行数匹配 - 用INDEX提取FILTER结果的第一行,即范围内的第一个星期三
- 用TO_DATE确保输出结果为日期格式
内容的提问来源于stack exchange,提问作者Marc Witteveen
相关产品推荐
相关产品推荐

