ARTICLE · 1089231
Excel:对前文多条件查询系统的优化
=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))))),"")


=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。