ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 26255|回复: 22

[已解决] 求助一下如何实现模糊查询

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-5-30 10:45 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
   我现在有一个表格,为了方便工作,把信息都汇总在了一个表里,但我现在只能精确查询。我想通过查询系统来实现如何输入一个地名(模糊查询),例如,天津日报大厦,只需输入日报大厦,系统便能够反映出此地点在什么车站哪个出入口。如能解答,不胜感激。

信息查询.rar

16.29 KB, 下载次数: 399

TA的精华主题

TA的得分主题

发表于 2014-5-30 10:58 | 显示全部楼层
A4公式:
  1. =VLOOKUP("*"&$D2&"*",信息!$A2:$D567,COLUMN(),)
复制代码

TA的精华主题

TA的得分主题

发表于 2014-5-30 10:58 | 显示全部楼层
可参考附件

信息查询.zip

20.42 KB, 下载次数: 693

TA的精华主题

TA的得分主题

发表于 2014-5-30 11:27 | 显示全部楼层
本帖最后由 jacky1998 于 2014-5-31 15:56 编辑

EXCEL比你想象的要强大得多,有着很大的数据库功能,ACCESS也是以它为基础的。
我给你做了一个,全模糊查询,就是说,输入一个关键字,能以任何列的内容作模糊1配对,将相关的内容全部展示出来。拉灰A4:D4,三键数组公式,后下拉。
=""&OFFSET(信息!$A$1,SMALL(IF(ISNUMBER((MMULT(N(ISNUMBER(FIND($D$2,信息!$A$1:$D$600))),{1;1;1;1}))^0),ROW($1:$600),4^8),ROW($A1))-1,COLUMN($A:$D)-1)公式只拉到第53行,可以拉到底的。输入(大学,小学,中学,大,小,中),一个个试下,很不错吧。经大神提醒,应去掉多余的无用函数,
=""&OFFSET(信息!$A$1,SMALL(IF(MMULT(N(ISNUMBER(FIND($D$2,信息!$A$1:$D$600))),{1;1;1;1}),ROW($1:$600),4^8),ROW($A1))-1,COLUMN($A:$D)-1)
试着去掉4^8,  好象“”&没用了,有错误 吗#Num, 就需前加一个IFERROR,

z.gif
信息查询.rar (19.81 KB, 下载次数: 1316)










补充内容 (2014-6-10 09:35):
2003版本的,将4^8,改为4^6!!!!!!!!

评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-5-30 14:20 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jacky1998 发表于 2014-5-30 11:27
EXCEL比你想象的要强大得多,有着很大的数据库功能,ACCESS也是以它为基础的。
我给你做了一个,全模糊查询 ...

可以帮忙解释下是什么意思吗?公式看不懂啊

TA的精华主题

TA的得分主题

发表于 2014-5-30 14:38 | 显示全部楼层
本帖最后由 jacky1998 于 2014-5-30 14:44 编辑

MMULT(................................,{1;1;1;1}
这个是核心呀,完全的数组计算,因为原表是4列N行,查找关键后,就是4列N行的FIND结果,
而FIND不配对,为#Value,配对的话为大于0的数字,用isnumber(find())后,配对的为TRUE,不配对错误转为fale(错误不是数字)
然后用 n(  ),后对应转成了,0与1.
这样就得到一个数组阵列(4列N行),用mmult()后,会将同行的数相加,同行有一个配对,即大于0,无任一配对为0,
得到一个1列N行的数据,对应原表的每一行,
然后用 0次方计算,大于0数字的0次方为1,而0的0次方返回#NUM错误,再用ISNUBER(),同样返回TRUE或FALSE.这里可以改成(if ( ......>0,row(),4^8)的形式,这样就不0次方及N转换。
IF(,,)对应到行号,再排序,最后OFFSET,对应就好了,
#############
公式应用了一些技巧,重复审核看看,慢慢就有所了解的。
将$600,全部改 $10后一步步看下。MMULT()需要单独了解,否则看不懂的。

行号=SMALL(IF(ISNUMBER((MMULT(N(ISNUMBER(FIND($D$2,信息!$A$1:$D$20))),{1;1;1;1}))^0),ROW($1:$20),4^8),ROW($A1))

点评

楼主这一句的红色部分似乎可取掉:行号=SMALL(IF(ISNUMBER((MMULT(N(ISNUMBER(FIND($D$2,信息!$A$1:$D$20))),{1;1;1;1}))^0),ROW($1:$20),4^8),ROW($A1))  发表于 2014-5-31 15:00

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2014-5-31 15:23 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 jacky1998 于 2014-5-31 15:45 编辑

楼主这一句的红色部分似乎可取掉:行号=SMALL(IF(ISNUMBER((MMULT(N(ISNUMBER(FIND($D$2,信息!$A$1:$D$20))),{1;1;1;1}))^0),ROW($1:$20),4^8),ROW($A1))  发表于 2014-5-31 15:00
谢谢提醒,是多余的!后面的4^8也不需要。=SMALL(IF(MMULT(N(ISNUMBER(FIND($D$2,信息!$A$1:$D$20))),{1;1;1;1})),ROW($1:$20)),ROW($A1))

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-6-1 12:04 | 显示全部楼层
非常感谢大家的帮助,我得好好学学了。太深奥了

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-7-3 16:59 | 显示全部楼层
再次感谢大家的帮助。还得请教大师们一个问题,就是jacky1998所列出的数组,如果在不需要输入查询的内容时,下面的表格能否不显示内容。谢谢

TA的精华主题

TA的得分主题

发表于 2014-7-4 12:38 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 jacky1998 于 2014-7-7 13:38 编辑
南极猛禽 发表于 2014-7-3 16:59
再次感谢大家的帮助。还得请教大师们一个问题,就是jacky1998所列出的数组,如果在不需要输入查询的内容时, ...


直接加一个IF,其它就显得麻烦了。if(d3="","",原公式)
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-15 23:56 , Processed in 0.028807 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表