Excel中的多字搜索字符串

时间:2016-04-04 14:58:41

标签: excel vba excel-vba

我有一个TextBox和ListBox。我想在包含用TextBox编写的特定多个单词(关键字)的范围内找到一个字符串,并将其显示在ListBox中

例如:

我有一个字符串a =“太阳正在闪耀” 我想研究范围,找到并显示包含这些特定单词的单元格值,当我在TextBox中编写例如“sun shinning”时。 看一下我的最后一个字符串,我用小写字写“sun”字样。

我写了代码

    Sub AAA()

    Dim ws As Worksheet
    Set ws = Worksheets("BBB")
    Dim LastRow As Long
    Dim i As Long


        ZZZ.Clear
        LastRow = ws.Range("D" & Rows.Count).End(xlUp).Row
        With ZZZ
            .ColumnCount = 3
            .ColumnWidths = "100;400"

            For i = 2 To LastRow
              '  For x = 0 To UBound(z)
                    If ws.Range("E" & i) Like AAA

.Value & "*" Then

                            .AddItem ws.Range("D" & i)
                            .column(1, ZZZ.ListCount - 1) = ws.Range("E" & i)
                            '.column(2, ZZZ.ListCount - 1) = ws.Range("E" & I)

                    End If
              '   Next x
            Next i

        End With

End Sub

但每次当我尝试添加第二个循环负责拆分句子并按每个单词循环时,我会收到一条错误消息。

您是否知道如何简单地修改我的代码来做到这一点?

1 个答案:

答案 0 :(得分:1)

假设输入文本框AAA的多个单词始终带有空格,则此过程有效(经过测试和测试)。

该过程使用Split函数将AAA文本框中的单词加载到数组中,然后为每个单元格循环数组。

Sub AAA()

    Dim ws As Worksheet
    Set ws = Worksheets("BBB")
    Dim LastRow As Long
    Dim i As Long


        ZZZ.Clear
        LastRow = ws.Range("D" & Rows.Count).End(xlUp).Row

        With ZZZ

            .ColumnCount = 3
            .ColumnWidths = "100;400"

            For i = 2 To LastRow

                Dim sWords() As String, x As Integer

                sWords = Split(AAA.Value, " ")

                For x = 0 To UBound(sWords)

                    If ws.Range("E" & i) Like "*" & sWords(x) & "*" Then

                        .AddItem ws.Range("D" & i)
                        .Column(1, Sheet1.ZZZ.ListCount - 1) = ws.Range("E" & i)

                    End If

               Next x

            Next i

        End With

    End Sub

当我输入这个时,我认为将数组循环一次并找到整个范围内每个单词的任何匹配可能更快,但我会把它留给你。

相关问题