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