ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[原创] 0秒,快速模糊搜索

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-5-16 11:52 | 显示全部楼层

拿下慢慢研究研究

TA的精华主题

TA的得分主题

发表于 2006-5-16 16:29 | 显示全部楼层

VBA中有Bug:

对多工作表操作时,当前查询的工作表中没有符合查找项时会把上一个工作表的查找结果带下来,造成误差

修改如下:

r = "" '这是新增语句
a = [c65536].End(xlUp).Row + 1
If UCase(ch.Name) = "SHEET1" Then GoTo 1
r = ch.Cells.Find(What:=[b2]).Address
If r = "" Then GoTo 1 '这是新增语句
fr = r

TA的精华主题

TA的得分主题

发表于 2006-5-16 16:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
以下是引用[I]qee用[/I]在2006-5-16 11:29:34的发言:[BR]看ldy888兄滴贴子,总是让人愉悦滴。
读ldy888兄滴代码,不吃力,但收获却是相当不小滴。
那代码写滴,是相当不错滴。俺给改改,也是相当不错滴。
可是俺上传这个东东,竟用了俺N多倍于改改的时间!
请教一下:我的数据表总共有10列,我想要的结果是:将含有搜索内容的字符所在行的10列数据全部显示出来,该如何用你的方法实现?

TA的精华主题

TA的得分主题

发表于 2006-5-16 16:42 | 显示全部楼层

是很好,不错,先收藏下来了。但有个问题请教:

1、VBA第一阶简单了宏与函数或是小程式体,

2、VBA第二阶就应该是模块/*.DLL/*.API吧,

3、VBA第三阶就应该是类了吧,

我有个朋友搞过VB,听他说了,

哎,没时间去看,如果有时间去学习,就好。顶,谢稿楼主的分享

TA的精华主题

TA的得分主题

发表于 2006-5-16 16:43 | 显示全部楼层
以下是引用[I]ldy888[/I]在2006-5-16 1:45:09的发言:[BR]

如果一行中有几个相同关键字,就会反应出相同的几行.

把代码中所有的"[b2]"都改成"[b1]",搜索内容要写在B1格

第一处Cells(a, 5) = Sheets(ch.Name).Range(r) 改为

Sheets(ch.Name).Rows(Sheets(ch.Name).Cells.Find(What:=[b2]).Row).Copy Rows(a + 1)

第二处Cells(a, 5) = Sheets(ch.Name).Range(r)改为

Sheets(ch.Name).Rows(Sheets(ch.Name).Cells.FindNext(after:=Sheets(ch.Name).Range(r)).Row). _Copy Rows(a + 1)

如不想要表名和单元地址,把两处Cells(a, 3) = ch.Name Cells(a, 4) =r 都去掉,再把上文的两处+1去掉

谢谢啊,可是太慢了,如果不是整行,而是前10列就可以了,如何修改?谢谢!

TA的精华主题

TA的得分主题

发表于 2006-5-16 20:33 | 显示全部楼层
楼上的问题我看得似懂非懂,建议上传附件+说明.

TA的精华主题

TA的得分主题

发表于 2006-5-16 21:54 | 显示全部楼层
以下是引用[I]qee用[/I]在2006-5-16 20:33:37的发言:[BR]楼上的问题我看得似懂非懂,建议上传附件+说明.
我要搜索的表格是一个有数万条记录,表格格式如下: 产品名 代码……     产品1A01      产品2A02      产品3A03      产品4A04      产品5A05      产品6A06      产品7A07      产品8A08      产品9A09      产品10A10      产品11A11      产品12A12      产品13A13      通常客户写出来的是名字,我需要通过对产品名的模糊匹配来找到该产品对应的代码输入到数据库中。这个时候我利用你写的代码是就需要再搜索结果中将代码的信息也显示出来,该如何做?我写了几个,都感觉太慢,你们的方法很好,搜索起来比较快。请指教,谢谢!

TA的精华主题

TA的得分主题

发表于 2006-5-16 22:03 | 显示全部楼层

你不必上传全部的内容,能说明问题就可以,只用文字是无法准确理解你的意思的,具体的代码也没地方写啊.

TA的精华主题

TA的得分主题

发表于 2006-5-16 22:13 | 显示全部楼层
以下是引用[I]qee用[/I]在2006-5-16 22:03:21的发言:

你不必上传全部的内容,能说明问题就可以,只用文字是无法准确理解你的意思的,具体的代码也没地方写啊.

GwQaow3Z.rar (22.98 KB, 下载次数: 39) 谢谢!~~ 我原来的文件太大了,刚刚自己做了一个,看看能不能明白我的意思?从结果中筛选的功能可以不做,第一步我描述的模糊搜索问题能不能实现呢?谢谢了!
[此贴子已经被作者于2006-5-16 22:49:03编辑过]

TA的精华主题

TA的得分主题

发表于 2006-5-16 23:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
如果从30楼所传表情况看,推荐使用ADO更合适.
Sub aTest()
On Error Resume Next
Dim cn As Object, Sql$, sh As Worksheet
Set cn = CreateObject("ADODB.Connection")
cn.Open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & ThisWorkbook.FullName
Application.ScreenUpdating = False
Sheets("Result").Select
Range("A4:H" & [A65536].End(xlUp).Row + 1).ClearContents
For Each sh In Worksheets
If sh.Name <> "Result" Then
Sql = "select * from [" & sh.Name & "$] where 药名 like '%" & [b1].Text & "%'"
[A65536].End(xlUp).Offset(1, 0).CopyFromRecordset cn.Execute(Sql)
End If
Next sh
Application.ScreenUpdating = False
cn.Close
Set cn = Nothing
End Sub
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-13 10:22 , Processed in 0.026288 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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