如何使用Excel公式将连续日期合并为日期范围存储到单个单元格
Excel合并连续日期为范围格式的公式实现方案
完全可以通过Excel公式实现该需求,根据你使用的Excel版本不同,可选择以下方案:
方案1:适用于Excel 365 / 2021及以上版本(单公式直接出结果)
假设你的日期数据存储在A2:A10区域,直接在空白单元格输入以下公式即可得到预期结果:
=TEXTJOIN(",",TRUE, LET( sorted, SORT(A2:A10), flag, SCAN(0,SEQUENCE(ROWS(sorted)),LAMBDA(a,i,IF(i=1,1,IF(INDEX(sorted,i)-INDEX(sorted,i-1)=1,a,a+1)))), grp, UNIQUE(flag), res, BYROW(grp,LAMBDA(g, LET( start, XLOOKUP(g,flag,sorted), end, XLOOKUP(g,flag,sorted,,,-1), IF(start=end,TEXT(start,"m月d日"),TEXT(start,"m月d")&"-"&TEXT(end,"d日")) ) )), res ) )
公式逻辑说明:
- 先用
SORT对原始日期做升序排序,避免原始数据顺序混乱导致连续判断出错 - 通过
SCAN生成连续日期的分组标记:相邻差值为1的连续日期会分到同一组,标记值相同 - 对每个分组提取起止日期:如果起止日期一致则输出单个日期,不一致则输出「x月x-x日」的范围格式
- 最后用
TEXTJOIN将所有日期段用中文逗号拼接
方案2:适用于Excel 2019及更早版本(辅助列实现)
低版本Excel不支持动态数组和LAMBDA函数,可通过辅助列实现:
- 第一步先将原始日期列按升序排序
- 辅助列B(分组标记):B2单元格输入
=IF(A2-A1=1,B1,ROW()),下拉填充到所有数据行 - 辅助列C(提取唯一分组):C2单元格输入数组公式
=IFERROR(INDEX(B:B,MATCH(0,COUNTIF(C$1:C1,B$2:B$10),0)+1),""),按Ctrl+Shift+Enter三键回车确认,下拉填充直到出现空白值 - 辅助列D(生成分组日期段):D2单元格输入
=IF(INDEX(A:A,MATCH(C2,B:B,0))=INDEX(A:A,MATCH(C2,B:B,1)),TEXT(INDEX(A:A,MATCH(C2,B:B,0)),"m月d日"),TEXT(INDEX(A:A,MATCH(C2,B:B,0)),"m月d")&"-"&TEXT(INDEX(A:A,MATCH(C2,B:B,1)),"d日")),下拉填充到C列空白值对应的行 - 最后在结果单元格输入
=TEXTJOIN(",",TRUE,D:D)即可得到拼接后的结果
注意事项:
- 上述公式中的
A2:A10请替换为你的实际日期存储区域- 请确保原始数据为Excel可识别的标准日期格式,而非文本格式,否则日期差值计算会失效
内容的提问来源于stack exchange,提问作者rexorsist
相关产品推荐
相关产品推荐

