EXCEL神乎其技 自制搜索引擎

Posted 纯老师的杂货铺

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL神乎其技 自制搜索引擎相关的知识,希望对你有一定的参考价值。

某日饭局突遇一小迷弟,

端着酒杯相迎一脸相见恨晚:


纯老师对饮而尽热泪盈眶:

EXCEL神乎其技 自制搜索引擎


这件事让纯老师深受鼓舞,

写点小破东西竟然还真有人看,

真有人喜欢,

很值得,

希望甲纯们多多点赞转发打赏啊。

EXCEL神乎其技 自制搜索引擎


话说上期介绍《一行快速变多行》,

找不到什么应用场景,

本期就把这个坑填喽。

EXCEL神乎其技 自制搜索引擎


先随便捏造一些数据,

比如纯老师自制的这些猪头大全:

EXCEL神乎其技 自制搜索引擎

EXCEL神乎其技 自制搜索引擎


这些猪头在工作表【数据表】内,

现在需要通过关键词,

比如搜索某一国籍(【数据表】下的[E]列)的猪头分别有哪些,

甲纯们可能第一时间会想到【自动筛选】功能,

在一大堆数据里面,

筛选出包含某些关键字的特定数据,

非常像是搜索引擎。

EXCEL神乎其技 自制搜索引擎


一般的操作如下:

EXCEL神乎其技 自制搜索引擎


纯老师嚼得这样操作还是太繁琐了,

而且也不智能,

其实只需要在一行变多行功能基础上,

加入一点模糊查找功能,

就可以打造私人订制的EXCEL搜素引擎了。

EXCEL神乎其技 自制搜索引擎


解题思路是酱紫的:

【第一大部分】

先使用COUNTIF函数,

把【指定数量】改成【出现次数】,

EXCEL神乎其技 自制搜索引擎

自动获取关键字在被搜索区域内模糊出现的次数。

EXCEL神乎其技 自制搜索引擎


【小知识点】

公式里面的【=IF(B:B="","",...】,

这是经常用到的条件判断公式,

因为多年的应试教育,

纯老师养成了先做排除法的习惯。

EXCEL神乎其技 自制搜索引擎


条件【B:B=""】,

意思是如果[B]列为空,

那计算结果就为空。

这就迅速排除了数据为空这一条件,

让整个表格非常的整洁,

而不是像部分甲纯做的表一样,

一旦有数据异常,

就会有各种的错误数据。

表格就显得非常混乱,

像下面这样:

EXCEL神乎其技 自制搜索引擎

 

这个小知识点很多地方都会用到的,

后面不再解释,

请甲纯们注意。

 

【第二大部分】

甲纯们应该都知道,

不管是使用VLOOKUP函数,

还是MATCH函数,

也不管是从上往下还是从下往上的顺序搜索,

得到的结果一定是最先符合条件的唯一值。

那如何把被搜索区域内所有符合条件的值,

都获取出来呢?

EXCEL神乎其技 自制搜索引擎


呃……好吧,

纯老师的思路这样的:

动态改变搜索函数的被搜索区域。

假设,使用MATCH函数从上往下搜索,

当找到符合条件的第一个值时,

那就把搜索过的这段被搜索区域去除掉,

从符合条件的第一个值的下一行,

开始进行下一次的搜索。


具体步骤如下:

新增一列【所在行号】,

公式……呃……有点长:

EXCEL神乎其技 自制搜索引擎


没事,逐步解析。

EXCEL神乎其技 自制搜索引擎

IF(G1<>G2】是一个大的判断:

【第1小步】

当【ID分解】列上下行的数据不一致时,

代表着搜索用的【关键词】不一样了,

不一样就意味着搜索区域必须重置,

从第1行开始搜索。

EXCEL神乎其技 自制搜索引擎

【第2小步】

当【ID分解】列上下行的数据一致时,

代表着搜索用的【关键词】是一样的,

一样就意味着下一次搜索时,

应该要截去上一次搜索的区域。

EXCEL神乎其技 自制搜索引擎

这其中INDIRECT("数据表!E"&(K1+1)&":E1000"),

是一个动态引用,

以本例分析计算步骤:

1、第一次计算时

([K3]运算,而不是[K2]计算,注意了),

INDIRECT("数据表!E"&(K2+1)&":E1000"),

=INDIRECT("数据表!E"&(3+1)&":E1000")

=INDIRECT("数据表!E4:E1000"),

即搜索区域从第4行开始,

截去了之前搜索过去的,

从第1行至第一次搜索到值的所在行第3行。

 

将上一步的计算结果代入,

MATCH("*"&H:H&"*",INDIRECT("数据表!E4:E1000")

=11,

意思是MATCH函数模糊搜索得到的值在第11行。

但最重点的是,

这个计算结果是在截去了1-3行的前提下的,

所有搜索出来的值所在的绝对行数是:

K2+MATCH("*"&H:H&"*",INDIRECT("数据表!E"&(K2+1)&":E1000")

=3+11

=14。


这是递推的算法,

第1次的查询结果为a,

算式总的计算结果为A=0+a;

第2次的查询区间就排除掉1至A这部分,

从A+1开始,

如果查询结果是b,

则算式总的计算结果是B=A+b;

第3次的查询区间就排除掉1至B这部分,

从B+1开始,

如果查询结果是c,

则算式总的计算结果是C=A+c;

以此类推……

 

EXCEL神乎其技 自制搜索引擎

所以,

纯老师讲清楚了吗?

EXCEL神乎其技 自制搜索引擎


呃……

算了算了,

EXCEL神乎其技 自制搜索引擎


按需再新增列【姓名】、【国籍】啥的,

公式如下:

非常简单,按照查找到的行号,

依次把数据匹配出来即可。

EXCEL神乎其技 自制搜索引擎


整体演示一遍:


查询结果快速而直观有莫有?

想要同时查询几个你说了算有莫有?

完全不用去破坏原数据表的格式有莫有?


最后的话,

还是那句话,

学习和开发时很复杂,

做好了就一劳永逸,

如果有甲纯经常用到搜素功能,

不妨尝试一下。

以上是关于EXCEL神乎其技 自制搜索引擎的主要内容,如果未能解决你的问题,请参考以下文章

[自制模板引擎]添加指令

[自制模板引擎] 为模板引擎增加解析表达式功能

windows下自制动画层引擎 - 放两个demo

自制仿360首页支持拼音输入全模糊搜索和自动换肤

JavaScript 自制可以替换属性的模板引擎(Template)

自制弹出框所踩的坑