本例的任务是根据生日统计各年份对应的人数,待统计的年份已预先填写在 E 列。
SUM+数组
最简单快捷的方法是用YEAR函数、SUM函数搭配数组运算:
=SUM(--(YEAR($C$3:$C$14)=E3))
从公式内部开始分析,YEAR 函数从每个日期中获取年份值:
{1993;1995;1995;1992;1993;1995;1996;1993;1996;1992}年份与E3单元格做对比,相同的返回TRUE,不同的返回FALSE,于是得到一个逻辑值数组:
{FALSE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE;FALSE;FALSE;TRUE}双减号(--)将TRUE转换为1,FALSE转换为0,再用SUM求和:
=SUM({0;0;0;1;0;0;0;0;0;1})数组中的1即表示对应的年份与E3中的年份相等,求和结果即相等的年份数量,公式向下填充时,会统计每个年份对应的生日数量,结果如图所示。
COUNTIFS搭配DATE
COUNTIFS 也能完成任务,但实现方式相对复杂。因为 COUNTIFS 只能对实际单元格区域进行条件判断,无法在函数内部直接提取日期中的年份并作为统计范围使用。为了解决这一问题,需要先为每个目标年份创建对应的起始日期和结束日期,再利用 COUNTIFS 按日期区间进行计数。其公式如下:
=COUNTIFS(C:C,">="&DATE(E3,1,1),C:C,"<"&DATE(E3+1,1,1))
第一个DATE返回E3中年份的1月1日,第二个DATE返回E3中年份下一年的1月1日:
DATE(E3,1,1) // 1992/1/1DATE(E3+1,1,1) // 1993/1/1
COUNTIFS统计的是大于等于1992/1/1且小于1993/1/1的日期数量。
把DATE的参数设置为数组,整个公式变成数组公式,以数组形式返回所有结果,可以省去下拉填充公式的步骤:
=COUNTIFS(C:C,">="&DATE(E3:E7,1,1),C:C,"<"&DATE(E3:E7+1,1,1))
GROUPBY搭配YEAR
GROUPBY是Excel365版本推出的新函数,可以轻松实现各种数据的统计。本案例的实质是要统计各个年份的数量,于是用YEAR提取出所有年份,将其作为GROUPBY的第一和第二参数,第三参数设置为COUNTA统计各自的出现次数:
=GROUPBY(YEAR(C3:C12),YEAR(C3:C12),COUNTA,0,0)
由于年份是数字,第三参数也可以调用COUNT来做统计:
=GROUPBY(YEAR(C3:C12),YEAR(C3:C12),COUNT,0,0)COUNTA用于统计非空单元格的个数;而COUNT用于统计数字单元格的个数。
当然,细心的你肯定已经发现GROUPBY不适用于提前把年份录入到单元格的情形,1994年的数量是0,在GROUPBY返回的结果中并不会出现。
夜雨聆风