今天继续说日期序列:如何生成当日所在季度的每一天?
案例:生成当前日期所在季度的完整日期列表,效果如下图所示。



整个公式比较长,为了帮助大家理解,我把它拆分开来,分段讲解。
1. 在 B2 单元格输入以下公式:
=DATE(YEAR(TODAY()),CHOOSE(CEILING(MONTH(TODAY())/3,1),1,4,7,10),1)


公式释义:
date 是用于生成日期的函数,格式为 date(年,月,日);
YEAR(TODAY()):今天日期所在的年份,用作 date 的第一个函数;
CEILING(MONTH(TODAY())/3,1):
ceiling 函数的作用是将第一个参数向上舍入到最接近第二个参数的倍数;
用 month 提取出当日所处的月份,除以 3 以后以 1 的倍数向上舍入,就能根据月份计算出季度数,结果分别为 1、2、3、4;
CHOOSE(...,1,4,7,10):
choose 函数的作用是使用索引号返回数值参数列表中的数值;
语法为 choose(索引号,值1, [值2], ...);
以季度为索引号,提取出每个季度的第一个月的月份;
这段公式在 date 的第二个参数的位置,承担月份的职责;
DATE(...,...,1):有了前面的年和月,第三个参数为 1,得到的日期就是所处季度的第一天。
2. 在 C2 单元格输入的以下公式:
=EOMONTH(DATE(YEAR(TODAY()),CHOOSE(CEILING(MONTH(TODAY())/3,1),1,4,7,10)+2,1),0)


公式释义:
这里的 date 函数跟前面异曲同工,唯一的差别是在第二个参数的公式后面 +2,作用是提取出当季度的最后一个月份;
EOMONTH(...,0):最后用 eomonth 函数提取出当月的最后一天的日期。
3. 在 A2 单元格中输入以下公式:
=SEQUENCE(C2-B2+1,,B2)


公式释义:
SEQUENCE 函数的作用是生成一序列连续的数值;
第一个参数 C2-B2+1 是数列的行数,用季度的最后一个日期减去第一个日期,再 +1,就是总天数,即总行数;
第二个参数是列数,省略的话默认为 1;
第三个参数 B2 是起始值。
4. 将 A 列的格式修改为日期。


