关于本站
1、基于Django+Bootstrap开发
2、主要发表本人的技术原创博客
3、本站于 2015-12-01 开始建站
筛选本来就可以用Excel自带的功能实现。但有些人说这样不方便,每次都要筛选之后再复制出来,问这个能不能用公式实现这个功能。
答案是肯定的,当然可以用公式实现。个人建议,如果数据量比较大的时候,不建议用下面讲到的公式。因为这是一个数组公式,数据量比较大的时候,运算会慢一些。
如果你不是只为了得到公式的话,就继续看我如何讲解这个筛选公式的原理。迫不及待的话,直接看博文结尾。
数据如下,有两列数据:姓名和性别。现想筛选出性别为“男”的姓名。
首先,我们可以if简单判断,但这样得到的结果不是连续的。
为了得到连续的结果,需要间接处理一下。修改一下if判断,若性别为男,则返回当前行号,反之则返回较大的行号。
为什么不符合条件就返回一个较大的行号呢,这个后面会解释。而且4^8是65536,2003格式的最大行号。得到这些行号之后,需要按照由小到大的顺序排列一下。这个可以用small函数,这个函数可以取第几小的值。
排列好顺序之后,就可以用index索引函数,根据行号取值。
到了这一步,可以发现符合条件的连续起来了。但出现了0,这个是取到空白的地方返回0。所以还需要优化处理一下,在index函数后面加上&""容错处理。
这样就得到我们想要的结果。到了这里大家应该明白为什么不符合条件就写一个较大的行号。这个较大的行号可以返回空白值。
写了5个公式有点多。可以合并为一个公式。这个公式是一个数组公式(数组公式需要按 Ctrl + Shift + Enter结束公式输入,而不是手动输入大括号)。
=INDEX(A:A,SMALL(IF(B$2:B$11=D$2,ROW(B$2:B$11),4^8),ROW(A1)))&""
经过前面的思路讲解,现在看这个数组公式就容易看懂了。if判断是否符合条件,符合的话返回当前行号,不符合就返回一个较大的值。再用small排列一下,用index函数取值。
相关专题: Excel公式学习
杨仕航
还是建议能用系统自带的筛选就用系统自带的筛选
2016-05-12 11:07 回复
杨仕航
回复功能测试(请忽略)
2016-05-12 11:07 回复