You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel生成指定月份周五周六日期的公式优化需求

通用解决方案:生成当月周五/周六序列

E11单元格(生成当月所有周五,向下拖动)

如果你的Excel支持LET函数(Office 365/2021及以上),使用简洁版公式:

= LET(
    first_fri, DATE(YEAR($K$6), MONTH($K$6), 1) + MOD(6 - WEEKDAY(DATE(YEAR($K$6), MONTH($K$6), 1),1),7),
    current_date, first_fri + 7 * INT((ROW()-11)/2),
    IF(MONTH(current_date)=MONTH($K$6), current_date, "")
)

兼容旧版Excel的展开式:

= IF(MONTH(DATE(YEAR($K$6), MONTH($K$6), 1) + MOD(6 - WEEKDAY(DATE(YEAR($K$6), MONTH($K$6), 1),1),7) + 7 * INT((ROW()-11)/2))=MONTH($K$6), DATE(YEAR($K$6), MONTH($K$6), 1) + MOD(6 - WEEKDAY(DATE(YEAR($K$6), MONTH($K$6), 1),1),7) + 7 * INT((ROW()-11)/2), "")

E12单元格(生成当月所有周六,向下拖动)

支持LET的简洁版:

= LET(
    first_sat, DATE(YEAR($K$6), MONTH($K$6), 1) + MOD(7 - WEEKDAY(DATE(YEAR($K$6), MONTH($K$6), 1),1),7),
    current_date, first_sat + 7 * INT((ROW()-12)/2),
    IF(MONTH(current_date)=MONTH($K$6), current_date, "")
)

兼容旧版Excel的展开式:

= IF(MONTH(DATE(YEAR($K$6), MONTH($K$6), 1) + MOD(7 - WEEKDAY(DATE(YEAR($K$6), MONTH($K$6), 1),1),7) + 7 * INT((ROW()-12)/2))=MONTH($K$6), DATE(YEAR($K$6), MONTH($K$6), 1) + MOD(7 - WEEKDAY(DATE(YEAR($K$6), MONTH($K$6), 1),1),7) + 7 * INT((ROW()-12)/2), "")

公式原理

  1. 计算当月第一个目标日期:
    • 周五:通过MOD(6 - WEEKDAY(月初日期,1),7)计算月初到第一个周五的天数差,确保结果始终落在当月内(比如4月1日是周六时,差值为6,得到4月7日)
    • 周六:同理,用MOD(7 - WEEKDAY(月初日期,1),7)计算差值,4月1日是周六时差值为0,直接返回4月1日
  2. 生成后续周的日期:
    • 利用INT((ROW()-起始行号)/2)实现每两行增加7天(对应周五、周六为一组,下一组自动跳转至下一周的周五/周六)
  3. 边界判断:通过MONTH(current_date)=MONTH($K$6)确保日期不超出目标月份,超出则返回空值

原问题原因

旧公式在月初为周六(WEEKDAY($K$6,1)=7)时,计算周五的逻辑会生成上月最后一天(如4月1日会算出3月31日),因月份不匹配返回空值。新公式直接锁定当月范围计算首个目标日期,彻底避免跨月问题。

内容的提问来源于stack exchange,提问作者YasserKhalil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 10:08:09