Настраиваемая разделенная строка в Excel VBA - PullRequest
0 голосов
/ 20 ноября 2018

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

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

"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 из attached snipit

1 Ответ

0 голосов
/ 20 ноября 2018

Мы можем сделать специальный тип анализа.Сначала конвертируйте:

<</strong>

в:

| <</strong>

, а затем конвертируйте:

>

до:

> |

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

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

enter image description here

...