Excel卓哥说:对筛选状态的表格做计算,结果自动更新,动态显示统计结果。

给筛选状态下的表格进行计算,让结果也会跟随筛选内容自动更新。前面讲过了如何给筛选状态的表格添加序号,并且在筛选完成后后面的序号也可以自动更新。

现在的问题是如果要对筛选出来的结果进行计算,并且在筛选条件更改后,计算结果也要原地自动更新。要如何做?话不多说。先看例子,B列是商品名,C列是数量,D列是单价。这位学员需要做的事也很简单,就是对商品进行筛选,把筛选出来的结果的总价计算出来。简单说就是把筛选结果的数量乘以单价再求和。

例如:筛选商品为牛奶和咖啡,总价单元格里的内容就是牛奶和咖啡的总价。如果换成了蛋糕和饼干,这个单元格里的结果又自动更新了。这是如何做的?先把筛选状态取消,然后把这个单元格里的内容删除掉。我先讲解sumproduct函数,这个函数前面讲过很多次了,这次是用的sumproduct函数的常规用法乘积和。

比如在这里输入=sumproduct(C4:C20.D4D20,返回相应的数组或区域乘逗号,d 4到d 20,右括号就表示用C列中的内容乘以D列中的内容后,再全部相加回车。

结果出现了,但是不论是数量列还是单价列,一旦对商品做了筛选,这个区域就要改变了。就需要用到subtotal函数来识别区域。比如在这里输入等于subtotal左括号,第1个三数输入3,这个3的意思就表示counta,意思就是对可见单元格计数。就是筛选出来的结果有多少条subtotal的。第2个参数就是区域的意思。

正如前面所说,区域会根据每次筛选商品的类别不同而产生变化。有的时候是10行,有的时候可能只有3行。

这个又如何识别呢?这就需要用到offset函数的数组用法了。这样为了讲解方便,在表格的下方跟大家讲解原理。因为如果放在表格的右边,只要一筛选,右边的行也会被隐藏。我放在下面就好理解了。但只是为了让大家看懂内部机理而已。

·在这里输入等于row函数,左括号三逗号,区域就用offset表达。在这里输入offset左括号,起点单元格是B3单元格,标题offset的第2个参数rows表示向下移动的行数。表格数据一共有17行,就输入row函数,左括号一冒号时期右括号。

这里的row只是用于提取一个数字,也就是从B3开始向下提取的行数,这个行数会随着筛选区域的变化而变化。

·第3个参数就是向右漂移的列数。这里输入0,因为只筛选商品这一列,然后右括号,这时offset就写完了。

·再输入右括号,这是subtotal的函数的回车,结果都是1。猜为什么?因为现在还没有筛选任何的条件,所有内容都是可见的。

再做一下筛选,比如,商品就选择咖啡和牛奶。大家看,刚才subtotal函数呈现的区域中是不是就出现了一些0呢?简单说,数字1正好对应的就是咖啡和牛奶对应的行,0就是除了咖啡牛奶以外的内容。接下来,用这一列乘以数量再乘以单价,不就正好是咖啡和牛奶的销售总额了吗?

想0乘以任何数都是0,需要的就是这一列编号唯一的行里的内容相乘。所以这个您各位要多多思考。那就一次性的把函数都写出来,先把筛选状态取消。在这里输入等于sumproduct做括号,这里其实就是3列相乘。第一列就是对筛选状态下的筛选出来的可见商品的列就是subtotal和offset的组合。继续输入subtotal左括号3,逗号offset,左括号b 3,逗号row左括号一,冒号时期右括号这里的时期是因为商品这一列除去标题一共有17行,逗号0又不好,再又不好。这样就构建了一个将商品进行筛选后把可见和不可见的商品转化为0和1这么一个列。

这是第一个区域逗号乘以数量列,也就是C4到C20,逗号再乘以单价列就是d四到d二十用户号回车。结果出现了。现在是全部商品的总价,当筛选商品为饼干和蛋糕是不是就更新了?重点是下面这个区域是不是只有4个为1的单元格?也就是这4行的数量和单价的乘积合了。

总结一下,对筛选状态下的表格计算让结果跟着筛选内容自动更新,这里涉及到三个关键的问题,以及这三个问题对应的三个函数。

·第一,数量乘以单价一次性批量求和的函数。这就是用的"乘积和"函数sumproduct。

·第二、对可见单元格做计算的函数subtotal。

·第三,自动识别筛选后的区域的函数offset。

如果您觉得我讲得还凑合,麻烦您点个赞,鼓励一下,要把函数的数组用法讲解出来还真的不是很容易的。如果你想持续学习,记得点点关注。如果你是真的想要系统学习Excel,记得给我私信留言!老规矩等等!其实像这一种需求,有人说用透视表,实际上透视表是没有办法通过计算字段来实现乘积和的。当然你可以使用SQL语句或者直接在透视表外面加辅助列来实现,But不论用哪种方法,只要能够满足您的数据分析需求就是合适的办法。就到这里了,记得要练习。还有别忘了点赞+关注。