暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

VBA 查找符合多条件的记录,其实很简单

Excel VBA练习 2021-07-15
4607

昨晚,想着考完试了,放松下,刷点视频,结果...趟下了

这几天,有小伙伴给小编留言,想看下一些关于单元格的一些玩法

为此,小编先做了个窗体,嗯!先写着,后面看到想到什么做什么...

今天先来玩下下Excel的查找替换,因为这个还是比较常用的


窗体先做成以下形式

由于还没想到做些什么,先画成这样,后续在改改...

晚上只做了查找的,明天再做替换

代码如下

    Option Explicit


    Private Sub UserForm_Initialize() '初始化窗体
    Dim intX&
    Dim aRes(1 To 56)
    For intX = 1 To 56
    aRes(intX) = intX
    Next
    With Me
    With .颜色
    .Font.Size = 11
    .List = aRes
    .ListIndex = 2
    End With
    .查找.Value = True
    .完整.Value = True
    End With
    End Sub


    Private Sub 区域选择_Click() '区域选择
    Dim Rng As Range
    Set Rng = Application.InputBox("数据来源", "请选择区域!!", ActiveCell.Address, , , , , 8)
    If Rng Is Nothing Then Exit Sub
    Set Rng = Intersect(Rng, Rng.Parent.UsedRange)
    Me.区域.Value = Rng.Address
    End Sub


    Private Sub 执行_Click()
    If Me.查找.Value Then
    Call Find_Value
    End If
    End Sub


    Sub Find_Value()
    Dim Rng As Range, Cell As Range, RngData As Range
    Dim strAddress$, strVal, strMatch$
    Set RngData = Range(Me.区域.Text)
    strVal = Me.查找内容.Text
    If Len(strVal) = 0 Then MsgBox "请输入查找内容", 64, "出错": Exit Sub
    With RngData
    .Interior.ColorIndex = 0 '初始化背景色
    strMatch = IIf(Me.完整.Value, xlWhole, xlPart) '匹配模式
    Set Cell = .Find(what:=strVal, LookIn:=xlValues, Lookat:=strMatch)
    If Cell Is Nothing Then MsgBox "[" & RngData.Address & "]区域中并无" & strVal, 64: Exit Sub
    strAddress = Cell.Address '记录第一个单元格地址
    Do
    If Rng Is Nothing Then
    Set Rng = Cell '初始化
    Else
    Set Rng = Union(Rng, Cell) '合并
    End If
    Set Cell = .FindNext(Cell) '查找下一个
    Loop Until Cell.Address = strAddress
    Rng.Interior.ColorIndex = Me.颜色.Text '标记背景颜色
    Me.标记.Caption = "总共找到了" & Rng.Count & "个" '写入找到多少个
    End With
    End Sub

    运行效果

    代码并不是很多,关于窗体的加载什么的先不说,先看下查找的代码,

    也就是第34行至57行

    第37行先获取了选择的区域,也就是以下窗体获取的单元格区域

    第38至39获取输入的内容,并且判断是不是空值

    第41行初始化查询区域的背景颜色

    第42行判断是完整匹配还是部分匹配

    第43至45行判断是否存在查找的内容,如不存在退出程序,存在则记录第一个单元格的地址

    第46至53行使用DO LOOP循环查找符合查找的内容

    这里使用了FindNext也就是查找下一个的意思

    第54至55行标记颜色并且输出查找到了多少个符合查找内容的个数

    ...

    今天就到这了,明天继续画下


    示例文件下载

    链接:https://pan.baidu.com/s/1Yw8BpUtojrg4jyhEEUdsxw

    提取码:abcd


    收工!

    如果小伙伴有好的思路,可以在小编的公众号留言发给小编研究下

    文章觉得有用,点个赞+在看,你的每一次点赞和转发就是小编原创的动力

    关注公众号 ↓

    文章转载自Excel VBA练习,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论