EXCEL神乎其技 自制搜索引擎
Posted 纯老师的杂货铺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EXCEL神乎其技 自制搜索引擎相关的知识,希望对你有一定的参考价值。
某日饭局突遇一小迷弟,
端着酒杯相迎一脸相见恨晚:
纯老师对饮而尽热泪盈眶:
这件事让纯老师深受鼓舞,
写点小破东西竟然还真有人看,
真有人喜欢,
很值得,
希望甲纯们多多点赞转发打赏啊。
话说上期介绍《一行快速变多行》,
找不到什么应用场景,
本期就把这个坑填喽。
先随便捏造一些数据,
比如纯老师自制的这些猪头大全:
这些猪头在工作表【数据表】内,
现在需要通过关键词,
比如搜索某一国籍(【数据表】下的[E]列)的猪头分别有哪些,
甲纯们可能第一时间会想到【自动筛选】功能,
在一大堆数据里面,
筛选出包含某些关键字的特定数据,
非常像是搜索引擎。
一般的操作如下:
纯老师嚼得这样操作还是太繁琐了,
而且也不智能,
其实只需要在一行变多行功能基础上,
加入一点模糊查找功能,
就可以打造私人订制的EXCEL搜素引擎了。
解题思路是酱紫的:
【第一大部分】
先使用COUNTIF函数,
把【指定数量】改成【出现次数】,
自动获取关键字在被搜索区域内模糊出现的次数。
【小知识点】
公式里面的【=IF(B:B="","",...】,
这是经常用到的条件判断公式,
因为多年的应试教育,
纯老师养成了先做排除法的习惯。
条件【B:B=""】,
意思是如果[B]列为空,
那计算结果就为空。
这就迅速排除了数据为空这一条件,
让整个表格非常的整洁,
而不是像部分甲纯做的表一样,
一旦有数据异常,
就会有各种的错误数据。
表格就显得非常混乱,
像下面这样:
这个小知识点很多地方都会用到的,
后面不再解释,
请甲纯们注意。
【第二大部分】
甲纯们应该都知道,
不管是使用VLOOKUP函数,
还是MATCH函数,
也不管是从上往下还是从下往上的顺序搜索,
得到的结果一定是最先符合条件的唯一值。
那如何把被搜索区域内所有符合条件的值,
都获取出来呢?
呃……好吧,
纯老师的思路这样的:
动态改变搜索函数的被搜索区域。
假设,使用MATCH函数从上往下搜索,
当找到符合条件的第一个值时,
那就把搜索过的这段被搜索区域去除掉,
从符合条件的第一个值的下一行,
开始进行下一次的搜索。
具体步骤如下:
新增一列【所在行号】,
公式……呃……有点长:
没事,逐步解析。
【IF(G1<>G2】是一个大的判断:
【第1小步】
当【ID分解】列上下行的数据不一致时,
代表着搜索用的【关键词】不一样了,
不一样就意味着搜索区域必须重置,
从第1行开始搜索。
【第2小步】
当【ID分解】列上下行的数据一致时,
代表着搜索用的【关键词】是一样的,
一样就意味着下一次搜索时,
应该要截去上一次搜索的区域。
这其中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神乎其技 自制搜索引擎的主要内容,如果未能解决你的问题,请参考以下文章