如何使用 VBA 查看单元格以查找特定文本,然后提取它?

如何使用 VBA 查看单元格以查找特定文本,然后提取它?

我有一列,其中的单元格的数据由 | 分隔符分隔。我需要能够查看每个单元格并查找特定文本,如果找到,则提取 | 之间的所有文本。

例如:单元格 A2 具有 blue story 1|red tree 2|orange flower 3|green car 4

我希望能够red tree 2使用该函数进行提取InStr(如果有更好的函数请提供建议!)

这是我目前拥有的代码:

Sub test()

Dim Field As Variant, rng As Range, cell As Range
Set rng = Range("A1:A5")

For Each cell In rng.Cells
    If InStr(cell.Value, "Red") > 0 Then
    Field = Split(cell.Value, "|")
    Cells(cell.Row, 2).Value = Field
    End If
Next

End Sub

这显然是一个逻辑错误,因为它输出的是数组中 | 的第一个文本,而不是实际包含“Red”的文本。

编辑:我需要它能够在任何给定的数组中找到“红色”,并且在它旁边的列中输出该数组。

答案1

你并没有错:Split() 返回一个基于 0 的字符串数组,如下所示:

Split Array (0): blue story 1
Split Array (1): red tree 2
Split Array (2): orange flower 3
Split Array (3): green car 6

因此,要修复代码,您需要检查数组中的每个值:

Public Sub test()
    Dim fld As Variant, rng As Range, cell As Range, i As Long

    Set rng = Range("A1:A5")

    For Each cell In rng.Cells
        If InStr(1, cell.Value, "Red", vbTextCompare) > 0 Then
            fld = Split(cell.Value, "|")
            For i = 0 To UBound(fld)
                If InStr(1, fld(i), "Red", vbTextCompare) > 0 Then
                    Cells(cell.Row, 2).Value = fld(i)
                    Exit For
                End If
            Next
        End If
    Next
End Sub

您还可以使用“文本分列”,或者类似这样的公式

=MID(A2,SEARCH("Red",A2,1),SEARCH("|",A2,SEARCH("Red",A2,1))-SEARCH("Red",A2,1))

相关内容