原始数据:
结果:根据品牌,筛选日期区间内的所有数据。
此题目,如用VBA处理将是极好的,一般这种情况,用函数来处理是比较无力的。
复杂一点的使用index small if万金油公式解决,但效率太低。
因此,使用辅助列才能使效率提升上来。
辅助列公式:
=IF(AND(A4>=Sheet2!$F$4,Sheet1!$A4<=Sheet2!$H$4,B4=Sheet2!$F$3)*1,COUNTIF(H$3:H3,'>0') 1,'')
解释:and函数满足三个条件都成立的时候,返回true。
AND(A4>=Sheet2!$F$4,Sheet1!$A4<=Sheet2!$H$4,B4=Sheet2!$F$3)
也就是品牌,开始日期,结束日期这三个条件都成立的话,将返回true。
而我们知道,在excel中,true有时候是等于1的。所以
AND(A4>=Sheet2!$F$4,Sheet1!$A4<=Sheet2!$H$4,B4=Sheet2!$F$3)*1
在条件都满足的情况下就返回1.这里转换成为1,是要使用1来计数(累计)。如下图:
COUNTIF(H$3:H3,'>0') 1
通过单元格错位,生成编号(计数),因为错位,所以初始值是1,countif后面需加上1.
通过辅助列(计数),就标记了符合条件数据所在的位置。知道数据所在的位置,就可以使用match来提取数据了。
数据提取公式:
=IFERROR(INDEX(Sheet1!A$4:A$21,MATCH(ROW(A1),Sheet1!$H$4:$H$21,0),),'')
结果:
这样,就完成了数据的筛选,效率也比使用数组公式要高得多。
数据文件下载:
链接: https://pan.baidu.com/s/1TNc4NkvFwKHborQEprLesw 密码: 3jjb
联系客服