夜雨聆风学习资料网

ARTICLE · 1089231

Excel:对前文多条件查询系统的优化

Excel:对前文多条件查询系统的优化
之前以闲置物资查询为例,做过一篇关于多条件查询的案例(点击查看:Excel/WPS之多条件搜索查询)。里面设置了三个搜索框,分别在三个搜索框中输入其中一个关键词来实现多条件查询搜索的功能。
主要还是利用了FILTER函数,

=FILTER(闲置物资清单!A2:G151,BYROW(闲置物资清单!A2:G151,LAMBDA(X,OR(ISNUMBER(FIND(B3,X)))))*BYROW(闲置物资清单!A2:G151,LAMBDA(X,OR(ISNUMBER(FIND(D3,X)))))*BYROW(闲置物资清单!A2:G151,LAMBDA(X,OR(ISNUMBER(FIND(F3,X))))),"")

FILTER函数将三个条件(红色、绿色、蓝色部分)用*连接,函数很长,书写很不方便。今天将这个案例优化了一下。在一个搜索框中输入多个关键词,关键词之间用空格隔开即可识别为独立的关键词来查询相应信息,函数也相对比较简单。成品如下:
函数如下

=IF(C4="","",FILTER(数据表!A2:G160,BYROW(REGEXP(数据表!A2:A160&数据表!B2:B160&数据表!C2:C160&数据表!E2:E160,TEXTSPLIT(C4," "),1),AND)))

函数解析:

 函数的主要逻辑思路:如果C4单元格(搜索框)为空,就返回空值,不为空,按FILTER函数筛选;

(1) 整段函数的含义:

  • 把原始数据表每一行的A、B、C、E列合并成一段文字;把C4单元格(搜索框)里用空格隔开的多个关键词拆分成关键词列表(REGEXP函数);

  • 从第2行开始,逐行判断A、B、C、E列拼接后的文本里是否包含C4单元格(搜索框)里拆分出来的任意一个关键词,匹配则返回TRUE,不匹配则返回FALSE(BYROW函数及REGEXP函数参数1)。

  • 按搜索框里输入的所有关键词均满足(BYROW函数的第二参数AND函数)为条件,在数据区域进行筛选(FILTER函数);

  • 如果搜索框里无任何内容时,返回空值,有内容时,按内容为条件进行搜索(IF函数)。

(2) FILTER函数:在数据表指定区域A2:G160中按BYROW函数为条件进行筛选;

(3) FILTER函数的筛选条件BYROW函数:

=BYROW(REGEXP(数据表!A2:A160&数据表!B2:B160&数据表!C2:C160&数据表!E2:E160,TEXTSPLIT(C4," "),1),AND)

(4) REGEXP函数:

=REGEXP(数据表!A2:A160&数据表!B2:B160&数据表!C2:C160&数据表!E2:E160,TEXTSPLIT(C4," "),1)

这段函数的意思:

遍历2-160行,每行把A、B、C、E列合并成一段文字;

把C4单元格(搜索框)里用空格隔开的多个关键词拆分成关键词列表;

判断A、B、C、E列拼接后的文本里是否包含C4单元格(搜索框)里拆分出来的任意一个关键词,匹配则返回TRUE,不匹配则返回FALSE。

相关学习资料