Excel 2013无宏实现自定义[YY]CW[WW].[D]周格式日期计算
Excel 2013 无宏实现自定义周格式日期运算方案
首先匹配你使用的格式规则:[YY]CW[WW].[D]遵循ISO 8601周历标准,即周一为周内第1天(D=1对应周一,D=7对应周日),每年首个包含1月4日的周记为第1周,和你给出的2022年7月15日(周五)对应22CW28.5的样例完全吻合。
整个实现过程不需要宏、不需要第三方加载项,全部用原生公式完成,分三个核心步骤:
1. 自定义格式文本转Excel标准日期
假设你的自定义周格式日期存在A1单元格,用以下公式可以将文本转为Excel可直接运算的日期序列值:
=DATE(2000+LEFT(A1,2),1,4)-WEEKDAY(DATE(2000+LEFT(A1,2),1,4),2)+7*(MID(A1,5,2)-1)+(RIGHT(A1,1)-1)
公式逻辑:
- 从文本中提取年份后两位补全为4位年份,提取两位周数、1位周内天序号
- 以每年1月4日(ISO周规定该日期必然属于当年第1周)为基准,定位到当年第1周的周一
- 按周数累加对应天数,再加上周内天偏移,得到准确的对应日期
你可以将公式所在单元格格式设为短日期验证:A1输入22CW28.5时,公式返回2022/7/15即为正确。
2. 执行日期运算
得到标准日期序列后,直接按自然日规则做加减即可:
- 累加N周:在日期值上加
N*7,比如累加2周就加14 - 累加/减少N天:直接加/减N
- 计算两个自定义格式日期的间隔天数:先把两个日期都转成标准序列值,直接相减即可
3. 运算后日期转回目标格式
假设运算完成后的标准日期存在B1单元格,用以下公式可以直接转回[YY]CW[WW].[D]格式:
=TEXT(B1,"YY")&"CW"&TEXT(ISOWEEKNUM(B1),"00")&"."&WEEKDAY(B1,2)
注意:WEEKDAY函数第二参数必须填2,才能保证返回值1~7对应周一到周日,和你的D值规则匹配;ISOWEEKNUM是Excel 2013原生自带函数,专门用于返回ISO标准周数,直接调用即可。
一步到位合并公式(无需中间单元格)
如果不想拆分步骤,直接在A1存储原始自定义格式文本,要得到加2周后的目标格式结果,可以直接用以下公式(把公式里的+14改成你需要的偏移天数即可,比如减1周改为-7、加3天改为+3):
=TEXT(DATE(2000+LEFT(A1,2),1,4)-WEEKDAY(DATE(2000+LEFT(A1,2),1,4),2)+7*(MID(A1,5,2)-1)+(RIGHT(A1,1)-1)+14,"YY")&"CW"&TEXT(ISOWEEKNUM(DATE(2000+LEFT(A1,2),1,4)-WEEKDAY(DATE(2000+LEFT(A1,2),1,4),2)+7*(MID(A1,5,2)-1)+(RIGHT(A1,1)-1)+14),"00")&"."&WEEKDAY(DATE(2000+LEFT(A1,2),1,4)-WEEKDAY(DATE(2000+LEFT(A1,2),1,4),2)+7*(MID(A1,5,2)-1)+(RIGHT(A1,1)-1)+14,2)
使用注意
- 原始文本必须严格遵循
YYCWww.d格式,周数固定为两位、周内天固定为1位,无多余空格,否则公式提取值会出错 - 跨年周(比如1月上旬属于上一年最后一周、12月下旬属于下一年第一周)的场景公式会自动匹配正确年份和周数,不需要手动调整
内容的提问来源于stack exchange,提问作者Pascal
相关产品推荐
相关产品推荐

