Excel单单元格如何根据[yyyy][mm][dd]格式日期计算后续周日并拼接显示
问题说明

- 单元格C3中的日期为
[yyyy][mm][dd]格式,需要在单个单元格内提取C3的日期,拼接该日期所属周的周日(格式为[dd].[mm].[yyyy])进行显示。 - 示例中原日期为07.06.2022,目标输出缺失部分为* - 12.06.2022*,完整预期结果为
07.06.2022 - 12.06.2022。 - 当前C2单元格使用的硬编码公式为:
=RIGHT(C3;2)&"."&MID(C3;5;2)&"."&LEFT(C3;4)&" - 12.06.2022"
- 曾尝试用DATE函数获取真实日期值,公式为:
=DATE(LEFT(C3;4);MID(C3;5;2);RIGHT(C3;2))
但该方法需要将单元格设置为日期格式,一旦在公式中拼接&" - ",单元格就会显示日期对应的数字序列号,无法正常显示格式化后的日期,异常效果如下:
- 额外需求:支持输出选定日期所在周的周一到周日完整区间(如
06.06.2022 - 12.06.2022),仅实现后续周日拼接也可满足基础需求。
解决方案
问题原因
日期在表格软件中本质是连续的序列数值,当用&拼接文本和日期值时,软件会自动调用日期的原始数值进行拼接,不会读取手动设置的单元格日期格式,因此会出现一串数字。只要在拼接前用TEXT函数主动把日期值转换成指定格式的文本,就可以规避这个问题,单元格保持常规格式即可,不需要单独设置为日期格式。
基础需求公式(原日期+当周周日)
核心逻辑:
- 用
DATE逻辑把C3的yyyymmdd格式文本转成可计算的真实日期值 - 用
WEEKDAY(日期;2)计算日期对应周几,该参数规则下周一返回1、周日返回7,因此当周周日的日期偏移量为7 - WEEKDAY(日期;2),和原日期相加即可得到周日的日期值 - 两个日期都用
TEXT(日期;"dd.mm.yyyy")转成要求的格式后再拼接
全版本兼容公式,不需要依赖高版本函数:
=TEXT(DATE(LEFT(C3;4);MID(C3;5;2);RIGHT(C3;2));"dd.mm.yyyy")&" - "&TEXT(DATE(LEFT(C3;4);MID(C3;5;2);RIGHT(C3;2))+7-WEEKDAY(DATE(LEFT(C3;4);MID(C3;5;2);RIGHT(C3;2));2);"dd.mm.yyyy")
如果使用Excel 365/2021及以上支持LET函数的版本,可以简化公式避免重复计算:
=LET( base_date;DATE(LEFT(C3;4);MID(C3;5;2);RIGHT(C3;2)); TEXT(base_date;"dd.mm.yyyy")&" - "&TEXT(base_date+7-WEEKDAY(base_date;2);"dd.mm.yyyy") )
代入示例的07.06.2022计算,会直接返回07.06.2022 - 12.06.2022,和预期结果完全一致。
进阶需求公式(周一到周日完整周区间)
在上述逻辑基础上,当周周一的日期偏移量为-(WEEKDAY(base_date;2)-1),和原日期相加即可得到周一日期,替换拼接部分的起始日期即可。
支持LET版本的简化公式:
=LET( base_date;DATE(LEFT(C3;4);MID(C3;5;2);RIGHT(C3;2)); week_mon;base_date-(WEEKDAY(base_date;2)-1); week_sun;base_date+7-WEEKDAY(base_date;2); TEXT(week_mon;"dd.mm.yyyy")&" - "&TEXT(week_sun;"dd.mm.yyyy") )
代入示例日期会返回06.06.2022 - 12.06.2022,符合周区间输出要求。
全版本兼容的长公式直接把变量替换为对应计算逻辑即可,不需要额外调整参数。
注意:如果使用WPS、Google Sheets等其他表格工具,只要确认WEEKDAY第二参数设为2时周一返回1、周日返回7,计算结果就不会出错。
内容的提问来源于stack exchange,提问作者NubCake
相关产品推荐
相关产品推荐

