Как разделить строку между запятыми и сохранить каждую в переменной массива с помощью 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