Настраиваемая разделенная строка в Excel VBA

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

Структура струн:

"sub-string part 1 <variable1> sub-string part 2 <variable2> sub-string part 3 <variable3>"

Я пытаюсь разбить строку на массив, чтобы каждый sub-string part и каждый <variable> являются элементом массива. Так что все, что находится между угловыми скобками <...> переменная

resultArray(): {"sub-string part 1", "<variable1>", "sub-string part 2", "<variable2>", "sub-string part 3", "<variable3>}

Перестановка строк может идти любым путем:

  1. "sub-string part 1 <variable1> sub-string part 2 <variable2> sub-string part 3 <variable3> sub-string part 4"

  2. "<variable1> sub-string part 1 <variable2> sub-string part 2 <variable3>"

  3. "<variable1> sub-string part 1 <variable2> sub-string part 2 <variable3> sub-string part 3"

  4. "эта строка не имеет переменной" (в этом случае только один элемент будет возвращать всю строку)

Я могу построить массив только <variable>использую regEx, но я не могу разделить его так, чтобы подстроки и переменные были элементами массива.

С точки зрения Excel, я пытаюсь автоматизировать то, что заполняется в столбце B на основе столбца A из прикрепленный фрагмент

1 ответ

Мы можем сделать специальный тип анализа. Первое преобразование:

<

чтобы:

|<

а затем конвертировать:

>

чтобы:

> |

а затем проанализировать с помощью трубы:

Sub SpecialParser()
    Dim s As String, arr
    With ActiveCell
        s = .Value
        s = Replace(Replace(s, "<", "|<"), ">", ">|")
        arr = Split(s, "|")
        .Offset(0, 1).Resize(1, UBound(arr) + 1).Value = arr
        If .Offset(0, 1).Value = "" Then .Offset(0, 1).Delete Shift:=xlToLeft
    End With
End Sub

Другие вопросы по тегам