Как разделить строку между запятыми и сохранить каждую в переменной массива с помощью vba - PullRequest
0 голосов
/ 30 сентября 2018

У меня есть вопрос: Как разделить строку между запятыми, которые находятся внутри открытых и закрытых скобок, и сохранить каждую в переменной массива?

Пример:

strinput = "( u1 u1t_a, u2 u2t_b, s2 s2t_c, s4 s4t_d, ...n )"

Имея входную строку выше, я хочу сохранить в переменной массива три и так далее подстроку между запятыми, которые находятся внутри открытых и закрытых скобок:

substr(0) = "u1 u1t_a"
substr(1) = "u2 u2t_b"
substr(2) = "s2 s2t_c"
substr(n) = "...n"

КакВ настоящее время у меня возникают трудности с использованием цикла вместе с массивом в VBA, поэтому мой код подобен грубой силе, которая может обрабатывать максимум 3 текста, поскольку код станет длинным, поэтому я установил ограничение.

Смотрите мой код здесь:

strinput = "( u1 u1t_a, u2 u2t_b, s2 s2t_c )"

substr1 = Right(strinput, Len(strinput) - Find("(", strinput))
    'Output: u1 u1t_a, u2 u2t_b, s2 s2t_c )
substr1f = Left(substr1, Find(",", substr1) - 1)
    'Output: u1 u1t_a

substr2 = Right(substr1, Len(substr1) - Find("(", substr1))
    'Output: u2 u2t_b, s2 s2t_c )
substr2f = Left(substr2, Find(",", substr2) - 1)
    'Output: u2 u2t_b

substr3 = Right(substr2, Len(substr2) - Find("(", substr2))
    'Output: s2 s2t_c )
substr3f = Left(substr3, Find(")", substr3) - 1)
    'Output: s2 s2t_c

Как я могу сделать этот цикл?

Ответы [ 4 ]

0 голосов
/ 01 октября 2018

Вы можете использовать функцию обрезки для удаления пробелов.

Sub test()
    Dim substr As Variant
    Dim strinput As String
    Dim i As Long

    strinput = "( u1 u1t_a, u2 u2t_b, s2 s2t_c, s4 s4t_d, ...n )"

    strinput = Replace(strinput, "(", "")
    strinput = Replace(strinput, ")", "")

    substr = Split(strinput, ",")

    For i = LBound(substr) To UBound(substr)
        substr(i) = Trim(substr(i))
        Debug.Print substr(i)
    Next i
End Sub
0 голосов
/ 30 сентября 2018

Это то, что вы пытаетесь сделать?Я прокомментировал код, чтобы у вас не было проблем с его пониманием ... И добро пожаловать в stackoverflow:)

Option Explicit

Sub Sample()
    Dim Ar As Variant
    Dim strinput  As String, s As String
    Dim i As Long

    strinput = "( u1 u1t_a, u2 u2t_b, s2 s2t_c, s4 s4t_d, ...n )"

    '~~> Replace ( and ) with ""
    s = Replace(Replace(strinput, ")", ""), "(", "")

    '~~> Split and store in an arry based on ","
    Ar = Split(s, ",")

    '~~> See what is there in the array
    For i = LBound(Ar) To UBound(Ar)
        Debug.Print Ar(i)
    Next i
End Sub

Если вы хотите объединить Replace and Split, то вы также можете использовать это

Option Explicit

Sub Sample()
    Dim Ar As Variant
    Dim strinput  As String
    Dim i As Long

    strinput = "( u1 u1t_a, u2 u2t_b, s2 s2t_c, s4 s4t_d, ...n )"

    Ar = Split(Split(Split(strinput, "(")(1), ")")(0), ",")

    '~~> See what is there in the array
    For i = LBound(Ar) To UBound(Ar)
        Debug.Print Ar(i)
    Next i
End Sub
0 голосов
/ 01 октября 2018

Другой вариант:

Sub MySub()
    Dim strinput As String, a As Variant
    strinput = "( u1 u1t_a, u2 u2t_b, s2 s2t_c, s4 s4t_d, ...n )"
    For Each a In Split(Mid$(strinput, 3, Len(strinput) - 4), ", ") ‘ first extract a substring out of your string leaving off first two and last two characters, then Split resulting string using commas as delimiter
        MsgBox a
    Next
End Sub

Вы можете посмотреть здесь функцию Mid $ ()

0 голосов
/ 30 сентября 2018

Как насчет:

Sub qwerty()

    strinput = "( u1 u1t_a, u2 u2t_b, s2 s2t_c, s4 s4t_d, ...n )"
    strinput = Replace(Replace(strinput, "( ", ""), " )", "")
    arr = Split(strinput, ", ")

    For Each a In arr
        MsgBox a
    Next a
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...