ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

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

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-1-19 20:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
Sub t()
    Dim i, j, x, t
    Dim rng As Range
    t = Timer
    For i = 2 To [a65536].End(3).Row
        For j = 1 To 20
            If InStr(Cells(i, j), "昆山") Then
                x = x + 1
                If rng Is Nothing Then
                    Set rng = Cells(i, j)
                Else
                    Set rng = Union(rng, Cells(i, j))
                End If
            End If
        Next j, i
        rng.Select
        MsgBox "查询到包含字符:" & FindSt & " 共计:" & x & "条记录!" & vbCrLf & "用时:" & Timer - t & " 秒!" & vbCrLf & vbCrLf & "---Find 查询!"
    End Sub

TA的精华主题

TA的得分主题

发表于 2019-1-19 20:31 | 显示全部楼层
主要就是慢在选中的时候

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-19 20:34 | 显示全部楼层
cjc209 发表于 2019-1-19 20:31
主要就是慢在选中的时候

嗯嗯,是的老师。我试过,如果用 instr 和数组仅做是否包含,只要0.3秒,但是为了选中单元格,就费时间了。不知道,是否有比较好的方法实现。10多秒总感觉受不了。。。。谢谢

TA的精华主题

TA的得分主题

发表于 2019-1-19 20:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
你要选中每个单元格 没有办法快啊 必须循环

TA的精华主题

TA的得分主题

发表于 2019-1-19 20:55 | 显示全部楼层
用正则,代码更简洁

微信图片_20190119204907.png
  1. Sub 查询()
  2. T = Timer
  3.     arr = [a1].CurrentRegion
  4.     Set regx = CreateObject("vbscript.regexp")
  5.     With regx: .Global = False: .Pattern = "昆山": End With
  6.         For Each AR In arr
  7.         Set B = regx.Execute(AR)
  8.         C = C + B.Count
  9.     Next
  10. CreateObject("Wscript.shell").popup " 昆山 记录共计:" & C & "条,一共用时:" & Format(Timer - T, "#0.0000") & "秒", , "ainiy提示!", 32
  11. End Sub
复制代码


评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2019-1-19 20:57 | 显示全部楼层
正则是快,主要楼主还需要选中满足条件的单元格,恐怕还得上个颜色之类的吧

TA的精华主题

TA的得分主题

发表于 2019-1-19 21:09 | 显示全部楼层
Sub test()
    Application.ScreenUpdating = False
    Dim arr
    Dim brr
    Dim i As Integer
    Dim j As Byte
    Dim t As Long
    Dim rng As Range
    Dim dic As Object
    Set dic = CreateObject("scripting.dictionary")
    t = Timer
    Set rng = Cells.Find("昆山", ActiveCell, , xlPart)
    arr = [a1].CurrentRegion
    For i = 2 To UBound(arr)
        If InStr(1, arr(i, 3), "昆山", vbTextCompare) > 0 Then
            Set rng = Union(rng, Cells(i, 3))
        End If
        If InStr(1, arr(i, 4), "昆山", vbTextCompare) > 0 Then
            Set rng = Union(rng, Cells(i, 4))
        End If
        If InStr(1, arr(i, 9), "昆山", vbTextCompare) > 0 Then
            Set rng = Union(rng, Cells(i, 9))
        End If
        If InStr(1, arr(i, 10), "昆山", vbTextCompare) > 0 Then
            Set rng = Union(rng, Cells(i, 10))
        End If
        If InStr(1, arr(i, 11), "昆山", vbTextCompare) > 0 Then
            Set rng = Union(rng, Cells(i, 11))
        End If
        If InStr(1, arr(i, 12), "昆山", vbTextCompare) > 0 Then
            Set rng = Union(rng, Cells(i, 12))
        End If
    Next i
    rng.Select
    MsgBox Format(Timer - t, "0.00")
End Sub

看來沒辦法,最直接也就這樣了,也要10秒多
主要都是太多ole,沒法快了
做功,一般都是運算計算吧,像這種要指家格的操作,應該只會做一兩次
你要經常這種操作?為什麼?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-19 21:36 | 显示全部楼层
张道贤 发表于 2019-1-19 20:55
用正则,代码更简洁

感谢老师的代码,正则提供了新思路。确实需要选中符合条件的单元格,是否有快速的代码呢?

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-1-19 21:38 | 显示全部楼层
chis3 发表于 2019-1-19 21:09
Sub test()
    Application.ScreenUpdating = False
    Dim arr

是的,老师,工作上领导经常要求把符合条件的单元格选出,改变颜色或者字体这些需求。谢谢您的指导!

等待更多老师的关注和代码,谢谢

TA的精华主题

TA的得分主题

发表于 2019-1-19 21:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
everbest2015 发表于 2019-1-19 20:57
正则是快,主要楼主还需要选中满足条件的单元格,恐怕还得上个颜色之类的吧

完全可以操作
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-3-29 16:57 , Processed in 0.053369 second(s), 11 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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