今天还是教新函数的思路。如果能用上 365 函数,不仅区域用法可以简化、可以自动扩展动态数组,还能套用递归思路。
可以说写公式越来越像编程了。
案例:下图 1 的数据表中如果当月的数值有空缺,则不做计算,整列数据当无效处理,如果没有空缺,则对当月数据求和。
效果如下图 2 所示。


1. 在 J3 单元格中输入以下公式 --> 回车:
=IF(ROWS($B.:.$B)>BYCOL(C:H,COUNTA),"无效",BYCOL(C:H,SUM))


公式释义:
$B.:.$B:
仍然是 trimrange 的简化写法,“:”前后各有一个“.”,表示提取 B 列的数据,剪裁掉前置和尾随的空白区域,结果就是 B2:B16;
$ 是绝对引用;
ROWS($B.:.$B):统计上述区域的总行数,结果如下:

BYCOL(C:H,COUNTA):
bycol 函数的作用是将 LAMBDA 应用于每一列,并返回结果数组;
公式表示对区域 C:H 中的每一列分别执行 counta 函数,即统计非空单元格数,最后返回整个区域的结果,如下:

IF(...>...,"无效",BYCOL(C:H,SUM)):将 B 列的非空单元格数依次与 C 至 H 列的非空单元格数相比,如果大于,则返回“无效”,否则就对 C 至 H 列依次求和。