前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用VBA查找并在列表框中显示找到的所有匹配项

使用VBA查找并在列表框中显示找到的所有匹配项

作者头像
fanjy
发布2022-04-13 13:36:15
13.1K5
发布2022-04-13 13:36:15
举报
文章被收录于专栏:完美Excel

标签:VBA,用户窗体,列表框

有时候,我们想从数据表中搜索指定的内容,但匹配项往往不只一项,而我们想要将匹配项全部显示出来,如下图1所示。

图1

在Excel中,有很多方法可以实现,这里使用用户窗体和VBA代码来完成。

示例数据如下图2所示。

图2

单击“查找”按钮,弹出我们所设计的用户窗体如下图3所示。

图3

其中,最主要的“查找”按钮对应的代码如下:

代码语言:javascript
复制
Private Sub SearchBtn_Click()
    Dim SearchTerm As String
    Dim SearchColumn As String
    Dim RecordRange As Range
    Dim FirstAddress As String
    Dim FirstCell As Range
    Dim RowCount As Integer
    ' 如果没有数据项输入则显示错误
    If FName.Value = "" AndLName.Value = "" And Location.Value = "" AndDepartment.Value = "" Then
        MsgBox "没有指定搜索项", vbCritical + vbOKOnly
        Exit Sub
    End If
    ' 找出要搜索的内容
    If FName.Value <> "" Then
        SearchTerm = FName.Value
        SearchColumn = "姓名"
    End If
    If LName.Value <> "" Then
        SearchTerm = LName.Value
        SearchColumn = "性别"
    End If
    If Location.Value <> ""Then
        SearchTerm = Location.Value
        SearchColumn = "城市"
    End If
    If Department.Value <> ""Then
        SearchTerm = Department.Value
        SearchColumn = "部门"
    End If
    Results.Clear
    ' 仅在相关表格列中搜索,即如果某人正在搜索位置,则仅在位置列中搜索
    With Range("Table1[" &SearchColumn & "]")
       ' 查找第一个匹配项
        Set RecordRange = .Find(SearchTerm,LookIn:=xlValues)
       ' 如果已找到匹配项
        If Not RecordRange Is Nothing Then
            FirstAddress = RecordRange.Address
            RowCount = 0
            Do
               ' 设置匹配值行中的第一个单元格
                Set FirstCell =Range("A" & RecordRange.Row)
               ' 添加匹配记录到列表框
                Results.AddItem
                Results.List(RowCount, 0) =FirstCell(1, 1)
                Results.List(RowCount, 1) = FirstCell(1,2)
                Results.List(RowCount, 2) =FirstCell(1, 3)
                Results.List(RowCount, 3) =FirstCell(1, 4)
                RowCount = RowCount + 1
               ' 查找下一个匹配项
                Set RecordRange =.FindNext(RecordRange)
               ' 当不再找得到匹配项时, 退出过程
                If RecordRange Is Nothing Then
                    Exit Sub
                End If
               ' 在找到唯一匹配项时继续查找
              Loop While RecordRange.Address<> FirstAddress
        Else
           ' 如果到了这里,则没有找到匹配的
            Results.AddItem
            Results.List(RowCount, 0) = "没有找到"
        End If
    End With
End Sub

代码中的Table1就是工作表中表名。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档