У меня есть столбец, который может содержать ячейки с данными, которые разделены на | разделитель. Мне нужно иметь возможность заглянуть в каждую ячейку и найти конкретный текст и, если он найден, извлечь весь текст между |.

Например: ячейка 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

Там явно логическая ошибка, потому что он выводит первые тексты | в массиве, а не фактический, содержащий "красный".

Редактировать: мне нужно, чтобы он мог найти "красный" в любом массиве и, если выход, вывести этот массив в столбце рядом с ним.

1 ответ1

2

Вы не слишком далеко: 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))

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .