ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[已解决] 实在受不了这个速度了!查找并选中指定字符单元格!

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-19 18:59 | 显示全部楼层 |阅读模式
本帖最后由 wfchenyiting 于 2019-1-19 19:06 编辑

各位老师,附件是5600行左右的数据,需要在表中查找并选定所有 包含 “昆山" 字符的单元格,我自己写了段代码,居然用时要13-14秒。真心受不了这个速度!请论坛大神们指导,有什么可以快速的方法得到同样的结果啊???谢谢!

a.png

  1. Sub 查找()
  2.     Dim FindSt$, Rg1 As Range, Rg2 As Range, Arr
  3.     Dim RgA$, RgCol As Range, x%, t
  4.     FindSt = "昆山"
  5.     Application.ScreenUpdating = False
  6.     t = Timer
  7.     Arr = [a1].CurrentRegion
  8.     Set Rg1 = Range("a1").Resize(UBound(Arr), UBound(Arr, 2))
  9.     Set Rg2 = Rg1.Find(FindSt, , , xlPart)
  10.     If Rg2 Is Nothing Then Exit Sub
  11.     RgA = Rg2.Address
  12.     Set RgCol = Rg2
  13.     Do
  14.         x = x + 1
  15.         Set Rg2 = Rg1.Find(FindSt, Rg2, , xlPart)
  16.         Set RgCol = Union(RgCol, Rg2)
  17.     Loop While Rg2.Address <> RgA
  18.     RgCol.Select
  19.     MsgBox "查询到包含字符:" & FindSt & " 共计:" & x & _
  20.         "条记录!" & vbCrLf & "用时:" & Timer - t & " 秒!" & _
  21.         vbCrLf & vbCrLf & "---Find 查询!"
  22.     Application.ScreenUpdating = True
  23. End Sub
复制代码


数据.zip

769.12 KB, 下载次数: 71

TA的精华主题

TA的得分主题

发表于 2019-1-19 19:19 | 显示全部楼层
本帖最后由 micch 于 2019-1-19 21:37 编辑

直接用系统的查找 ctrl+H 好像也不快
选中单元格,就只能在单元格区域一个一个依次操作,快不起来

TA的精华主题

TA的得分主题

发表于 2019-1-19 19:26 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
为什么直接在表中查啊?放入数组中不好吗

TA的精华主题

TA的得分主题

发表于 2019-1-19 19:27 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-19 19:39 | 显示全部楼层
qingc0221 发表于 2019-1-19 19:26
为什么直接在表中查啊?放入数组中不好吗

主要是为了查找到并选中符合的单元格啊。否则还有什么好的方法实现啊?谢谢

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-19 19:40 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
jiangxiaoyun 发表于 2019-1-19 19:27
筛选就很快,尝试一下

如何筛选啊?老师,代码可以实现?帮忙看看呢

TA的精华主题

TA的得分主题

发表于 2019-1-19 19:41 | 显示全部楼层


  1. Sub t()
  2. Dim i, j, x, t
  3. t = Timer
  4. For i = 2 To [a65536].End(3).Row
  5. For j = 1 To 20
  6. If InStr(Cells(i, j), "昆山") Then
  7. x = x + 1
  8. End If
  9. Next j, i
  10. MsgBox "查询到包含字符:" & FindSt & " 共计:" & x & "条记录!" & vbCrLf & "用时:" & Timer - t & " 秒!" & vbCrLf & vbCrLf & "---Find 查询!"
  11. End Sub
复制代码
111.jpg

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-19 19:45 | 显示全部楼层

谢谢老师的代码,instr 我也试过,如果仅是判断是否包含,是好像比find的速度快些,但是您的代码没有对符合条件的单元格进行选中的需求。请老师增加选中的代码呢。谢谢

TA的精华主题

TA的得分主题

发表于 2019-1-19 20:11 | 显示全部楼层
Sub test()
    Dim arr
    Dim brr
    Dim i As Integer
    Dim j As Byte
    Dim t As Long
    Dim rng As Range
    t = Timer
    arr = [a1].CurrentRegion
    For i = 2 To UBound(arr)
        brr = Application.Transpose(Range("a" & i & ":" & "s" & i))
        If InStr(1, Join(Application.Transpose(brr), ","), "昆山", vbTextCompare) > 0 Then
            brr = Range("a" & i & ":" & "s" & i)
            For j = 1 To UBound(brr, 2)
                If InStr(1, brr(1, j), "昆山", vbTextCompare) > 0 Then
                    If rng Is Nothing Then
                        Set rng = Cells(i, j)
                    Else
                        Set rng = Union(rng, Cells(i, j))
                    End If
                End If
            Next j
        End If
    Next i
    rng.Select
    MsgBox Format(Timer - t, "0.00")
End Sub

也快不多,主要還是太多循環,但我看到你也不是全部格仔也需要找,只有數行要找吧
那就只集中在數行,應該快不少

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-19 20:26 | 显示全部楼层
chis3 发表于 2019-1-19 20:11
Sub test()
    Dim arr
    Dim brr

复制了您的代码,运行了下,确实速度并没有显著的变化,不过还是非常感谢您的代码和指导。谢谢

TIM截图20190119202401.png

期待其它老师能帮忙优化下,谢谢!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-25 23:54 , Processed in 0.037748 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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