Несмотря на то, что arr обозначается как вариант, отдельные элементы становятся типами string, как только вы присваиваете им значения, как вы это сделали. Вы могли бы сделать что-то подобное
Sub testarr()
Dim arr As Variant, str As String, i As Integer
Dim v As Variant
str = "{test:[{test this here||Can it be split inside the array?}]}"
arr = Split(str, "[{")
For i = LBound(arr) To UBound(arr)
Debug.Print TypeName(arr(i))
v = Split(arr(i), "||")
Next i
End Sub
Обновление На основании комментариев от ОП можно попробовать сделать это, чтобы заменить исходный массив новым разделенным
Sub testarr()
Dim arr As Variant, str As String, i As Integer
Dim v As Variant, s As String
str = "{test:[{test this here||Can it be split inside the array?}]}"
arr = Split(str, "[{")
For i = LBound(arr) To UBound(arr)
'Debug.Print TypeName(arr(i))
v = Split(arr(i), "||")
s = s & "||" & Join(v, "||")
Next i
arr = Split(s, "||")
End Sub
Обновление 2 Опять же, на основе кода комментария ОП, который вернет структуру, описанную в посте ОП.
Sub testarr()
Dim arr As Variant, str As String, i As Integer
Dim v As Variant, s As String
Dim arr1 As Variant
Dim dic As New Scripting.Dictionary
str = "{test:[{test this here||Can it be split inside the array?}]}"
arr = Split(str, "[{")
For i = LBound(arr) To UBound(arr)
v = Split(arr(i), "||")
If UBound(v) > 0 Then
dic.Add i, v
Else
dic.Add i, arr(i)
End If
Next i
ReDim arr1(dic.Count - 1)
For i = 0 To dic.Count - 1
arr1(i) = dic.Item(i)
Next i
End Sub