有时候可能会隐藏几行数据,这时候求和就要用到SUBTOTAL这个函数了。在没有隐藏的时候,SUBTOTAL函数结果与SUM函数计算的结果一致,如下:
一旦我们将其中的某几行(如第3、6、9、12行)数据隐藏起来,结果就发生了变化,如下:
注意SUBTOTAL函数的第一个参数使用109就是表示忽略隐藏行的求和。
关于SUBTOTAL这个函数,之前发表过教学,有兴趣的朋友可以去看看历史文章。
今天我们要讨论的问题不是忽略隐藏行如何求和,而是忽略隐藏列如何求和。首先要明确一点,SUBTOTAL这个函数是做不到这一点的,在函数的帮助里说的很清楚:
不但SUBTOTAL函数做不到,就目前来说, Excel还没有可以忽略隐藏列进行求和的函数。那么对于这种需求该如何处理呢?这要用到一个比较新鲜的函数——CELL函数来做辅助才行。
相信见过这个函数的朋友不多,会用这个函数的就更少,我们就先来简单了解一下CELL函数是用来做什么的。在单元格输入=c就会看到这个函数的身影,选择函数后,会出现一个简单的解释:
在这句话中,可以大致了解到CELL函数可以得到一个单元格的格式、位置等信息。双击这个函数,会出现一些选项:
可以看到,函数有两个参数,info_type和reference。第一个参数info_type,信息类型,一共有12种,各种类型具体含义可以通过函数帮助了解:
对于这些信息类型有兴趣的朋友可以自己看看,它们都非常容易理解。今天重点要用到的是最后一个信息类型”width”,简单来说就是列宽。
有些朋友可能已经想到了,如果列被隐藏的话其列宽就是0,到底是不是这样,我们可以来试试看。公式的第一参数选择”width”,第二参数设为B1,表示要得到B1单元格的列宽(实际上就是B列的列宽)。在B16单元格输入公式:=CELL(“width”,B1),然后将公式向右拉:
结果全部是8。我们可以试试调整个别列的宽度,再看看是否有变化:
当我们调整了宽度以后,结果还是8,难道是公式有问题吗?
其实不是的,原因是CELL函数有点小脾气,当单元格的格式发生变化以后(列宽就是一种格式)必须重新计算才能更新结果。重新计算有两种方法,一是按F9功能键,二是双击任意单元格后回车。再来看看就发现结果已经更新了:
数字的大小的确与单元格的宽窄对应。讲到这里如何忽略隐藏的列求和,答案已经呼之欲出了:使用CELL函数得到列宽,再用SUMIF函数实施求和。I2单元格输入公式为:=SUMIF($B$16:$G$16,”>0″,B2:G2),然后将公式向下拉。
在没有隐藏的时候,就是全部求和,现在我们隐藏几列看看效果:
隐藏后记得要按F9或者双击一下哦。
问题到这里似乎该结束了,可是总有些伙伴不太乐意用辅助列(辅助行),就想用数组公式来实现,例如:=SUMPRODUCT((CELL(“width”,B1:G1>0)*B2:G2)
想法似乎很有道理,但是这样做是不行的,因为如果参数 reference 是某一单元格区域,则函数 CELL 只将该信息返回给该区域左上角的单元格。也就是说,虽然写了B1:G1这样一个区域,但是得到的只是B1的列宽。
是不是觉得cell这个函数的脾气挺怪的~~~
实际上这个函数还有很多有趣的用法,如果你想知道的话,在下面留言吧!