2017-07-25 110 views
1

我在一行上有3个信息,我可以选择多行。所以我在寻找的是将每一行的第一次分割成数组的方法。将字符串拆分为矩阵vba

这就是我在这里做的。 线=斯普利特(MSG“”)

然后我想,每行拆分信息得到一基质与第一IDENTIFER线和第二个是信息

ReDim pro(Ubound(line),3) 
For i = 0 To Ubound(line) 
pro(i) = Split(ligne(i), "/") 
Next 

但它扔我不匹配的错误,所以我不知道该怎么办呢

例如:

我有这个

MSG1/1250 /说明,MSG 2/1500/DESCR iption2,msg3,45656,Desctiption3

终于有这样的:

亲(0,0)= MSG1

亲(0,1)= 1250

亲(1,1) = 1500 等等

谢谢

+0

你能举出更多的例子吗,没有'etc'? – Vityata

回答

0

这是我做的:

Option Explicit 

Public Sub TestMe() 

    Dim strInput   As String 

    Dim arrVals    As Variant 
    Dim arrVar    As Variant 
    Dim arrVar2    As Variant 
    Dim arrResult   As Variant 
    Dim lngCount   As Long: lngCount = 0 

    strInput = "msg1/1250/Description,msg2/1500/Description2,msg3/45656/Desctiption3" 
    arrVals = Split(strInput, ",") 

    ReDim arrResult(UBound(arrVals), 1) 

    For Each arrVar In arrVals 

     arrVar2 = Split(arrVar, "/") 
     arrResult(lngCount, 0) = arrVar2(0) 
     arrResult(lngCount, 1) = arrVar2(1) 
     lngCount = lngCount + 1 

    Next arrVar 

End Sub 

这就是结果:

enter image description here

据我没有看到你需要一个DescriptionN我跳过它。

+1

谢谢我想我会把你的例子放在我的程序中,我真的很友善 –

+0

@LoPCastro - 欢迎您随时将我的答案标记为已接受。 – Vityata

1

以任何方式不是最佳的,但它应该给你一个开始:

Dim RowCount As Integer 
Dim i As Integer 
Dim j As Integer 
Dim x As Variant 
Dim y As Variant 
Line = "msg1/1250/Description,msg2/1500/Description2,msg3/45656/Desctiption3" 
RowCount = UBound(Split(Line, ",")) + 1 
ReDim pro(RowCount, 3) 
For Each x In Split(Line, ",") 
    j = 0 
    For Each y In Split(x, "/") 
     pro(i, j) = y 
     j = j + 1 
    Next y 
    i = i + 1 
Next x 
+0

如果您删除'+ 1'并将'ReDim pro(RowCount,3)'更改为'ReDim pro(RowCount,2)',您的解决方案会更好。目前,您在矩阵的行和列中都有空值。但仍然足够:) – Vityata

+1

随着Vityala修复它与我工作正常谢谢 –

1

最初作为pro被称为“锯齿阵列”。您可以使用“双转置”将其转换为二维数组。但要注意,它需要所有的“行阵”是同样大小的:

Function toMatrix(msg as string) 
    Dim line: line = Split(msg, ",") 
    ReDim pro(UBound(line)) 
    Dim i As Long 
    For i = 0 To UBound(line) 
    pro(i) = Split(line(i), "/") 
    Next 

    ' transform array of arrays into a 2D array. 
    toMatrix = Application.Transpose(Application.Transpose(pro)) 
End Function 

Sub Test 
    Dim msg As String 
    msg = "msg1/1250/Description,msg2/1500/Description2,msg3/45656/Desctiption3" 
    Dim ar 
    ar = toMatrix(msg) ' ar is now a 2D array 
End Sub 
+0

谢谢,我没有想到它是与我的数组的类型有关,我甚至不知道你可以转置数组,以转换他们 –