如何在Excel中获取指定月份每周首尾工作日(不含周末)
在Excel中提取指定月份的每周工作日区间(排除周六周日)
需求说明
输入指定月份,生成该月内每周的工作日起始与结束日期(自动排除周六、周日),例如输入2024年2月,输出结果为:2月5日 - 2月9日、2月12日 - 2月16日、2月19日 - 2月23日、2月24日 - 2月29日
解决方案(Excel 365/2021+版本)
直接使用数组公式一步到位,无需辅助列:
=LET( input_month, A1, start_month, EOMONTH(input_month,-1)+1, end_month, EOMONTH(input_month,0), work_days, WORKDAY.INTL(start_month-1,NETWORKDAYS(start_month,end_month,1),1), week_nums, WEEKNUM(work_days,2), unique_weeks, UNIQUE(week_nums), start_days, XLOOKUP(unique_weeks,week_nums,work_days,,0,1), end_days, XLOOKUP(unique_weeks,week_nums,work_days,,0,-1), TEXTJOIN("、",TRUE,TEXT(start_days,"m月d日")&" - "&TEXT(end_days,"m月d日")) )
公式说明
input_month:指定月份的单元格引用(可输入该月任意日期,如2024/2/1,或直接输入数字2,Excel会默认当年对应月份)start_month:计算该月份的第一天end_month:计算该月份的最后一天work_days:生成该月所有工作日的数组(自动排除周六、周日)week_nums:为每个工作日标记周数(以周一作为一周的起始)unique_weeks:提取该月工作日覆盖的所有唯一周数start_days:查找每个周数对应的第一个工作日end_days:查找每个周数对应的最后一个工作日TEXTJOIN:将所有工作日区间用顿号连接成最终字符串
旧版Excel兼容方案(无LET/XLOOKUP函数)
如果使用Excel 2019及更早版本,可通过辅助列实现:
- 步骤1:生成该月所有工作日
在B2单元格输入公式,下拉至无结果:=IF(WORKDAY.INTL(EOMONTH($A$1,-1),ROW(A1),1)<=EOMONTH($A$1,0),WORKDAY.INTL(EOMONTH($A$1,-1),ROW(A1),1),"") - 步骤2:标记每周起始日期
在C2单元格输入公式,下拉:=IF(WEEKNUM(B2,2)=WEEKNUM(B1,2),"",B2) - 步骤3:标记每周结束日期
在D2单元格输入公式,下拉:=IF(WEEKNUM(B2,2)=WEEKNUM(B3,2),"",B2) - 步骤4:合并区间
在E2单元格输入数组公式(按Ctrl+Shift+Enter确认):=TEXTJOIN("、",TRUE,IF(C2:C100<>"",TEXT(C2:C100,"m月d日")&" - "&TEXT(D2:D100,"m月d日"),""))
验证示例
将A1单元格设为2024/2/1,使用上述公式会输出:
2月5日 - 2月9日、2月12日 - 2月16日、2月19日 - 2月23日、2月24日 - 2月29日
完全匹配需求示例。
内容的提问来源于stack exchange,提问作者I'm Geeker
相关产品推荐
相关产品推荐

