云霞资讯网

Excel 逐列扫描,如果没有空单元格则按列求和,否则视作无效数据

今天还是教新函数的思路。如果能用上 365 函数,不仅区域用法可以简化、可以自动扩展动态数组,还能套用递归思路。可以说写

今天还是教新函数的思路。如果能用上 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 列依次求和。