Как разделить строку между запятыми и сохранить каждую в переменной массива с помощью vba

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

пример:

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 ответов


это то, что вы пытаетесь сделать? Я прокомментировал код, поэтому у вас может не возникнуть проблем с его пониманием... И добро пожаловать в 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

Как насчет:

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

еще один аромат:

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$ ()


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

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