仅用Excel公式提取多组起止日期间所有日期的通用单公式
原生Excel多起止日期区间全日期展开单公式方案
- 适配所有原生Excel环境,无需第三方插件、无需VBA
- 不受源数据区间行数限制,新增、删除、修改起止区间后结果自动刷新
- 支持动态数组的版本输入单公式后自动溢出全部结果,无需手动下拉填充
数据存放约定
默认约定:开始日期存放在A列、结束日期存放在B列,第1行为表头,有效数据从第2行开始,每组数据结束日期不早于开始日期,无无效空行。如果你的数据存放在其他列,修改公式内对应列参数即可。
适用Excel 365/2021及以上版本(支持动态数组)公式
直接选中结果存放的首个单元格(比如D2),粘贴以下公式按回车即可:
=LET( 数据首行,2, 开始列,A:A, 结束列,B:B, 最后行,MAX(IFERROR(MATCH(1,0/(开始列<>"")),1),IFERROR(MATCH(1,0/(结束列<>"")),1)), 开始区间,INDEX(开始列,数据首行):INDEX(开始列,最后行), 结束区间,INDEX(结束列,数据首行):INDEX(结束列,最后行), 区间长度,结束区间-开始区间+1, 总长度,SUM(区间长度), 累计长度,SCAN(0,区间长度,LAMBDA(a,b,a+b)), 行号序列,SEQUENCE(总长度), 所属区间,MATCH(行号序列,累计长度,1), TOCOL(IFS(行号序列<=累计长度,INDEX(开始区间,所属区间)+行号序列-IF(所属区间=1,0,INDEX(累计长度,所属区间-1))-1),2) )
适用Excel 2019及更早版本(无动态数组支持)公式
选中结果列从第2行开始、长度大于等于所有区间总天数的单元格区域,粘贴以下公式后按Ctrl+Shift+Enter三键结束数组公式计算即可:
=IFERROR(SMALL(IF(COUNTIFS(A:A,"<="&ROW(INDIRECT(MIN(A:A)&":"&MAX(B:B))),B:B,">="&ROW(INDIRECT(MIN(A:A)&":"&MAX(B:B)))),ROW(INDIRECT(MIN(A:A)&":"&MAX(B:B)))),ROW(A1)),"")
注:该版本公式需要保证结果区域预留足够行数,否则超出部分无法显示。
效果说明
公式输出顺序和你录入的起止区间顺序一致,会自动跳过区间之间的间隔日期。例如录入3组区间:2023/1/1-2023/1/3、2023/1/5-2023/1/6、2023/1/10-2023/1/12,输出结果为连续的单列日期:
- 2023/1/1
- 2023/1/2
- 2023/1/3
- 2023/1/5
- 2023/1/6
- 2023/1/10
- 2023/1/11
- 2023/1/12
输出结果为Excel标准日期格式,可直接通过单元格格式调整显示样式。
内容的提问来源于stack exchange,提问作者PaGaN DoN
相关产品推荐
相关产品推荐

