数据中的锯齿状数组|文本到列

时间:2014-10-27 11:53:22

标签: excel vba excel-vba jagged-arrays

我有什么

让我们举一个有效的代码示例。

Sub Sample()
    Dim ws As Worksheet

    Set ws = ThisWorkbook.Sheets("Sheet1")

    ws.Columns(1).TextToColumns _
        Destination:=Range("A1"), _
        DataType:=xlFixedWidth, _
        FieldInfo:=Array( _
                        Array(0, 1), Array(60, 1), Array(120, 1), Array(180, 1), _
                        Array(240, 1), Array(300, 1), Array(360, 1), Array(420, 1) _
                         ), _
        TrailingMinusNumbers:=True
End Sub

我想要什么

在一小组数据中,上述代码有效。但如果我想说Array(2700,1)怎么办?这意味着我必须写46Array(0, 1), Array(60, 1)...Array(1080, 1)....Array(2700, 1)

我尝试了什么

我尝试使用这种方法

Sub Sample()
    Dim ws As Worksheet
    Dim MyArray
    Dim MyStr As String
    Dim i As Long

    For i = 0 To 2700 Step 60
        MyStr = MyStr & "#" & "Array(" & i & ",1)"
    Next i

    MyStr = Mid(MyStr, 2)

    MyArray = Split(MyStr, "#")

    Set ws = ThisWorkbook.Sheets("Sheet1")

    ws.Columns(1).TextToColumns _
        Destination:=Range("A1"), _
        DataType:=xlFixedWidth, _
        FieldInfo:=MyArray, _
        TrailingMinusNumbers:=True
End Sub

显然这不起作用,因为Array(i,1)被存储为MyArray中的字符串。

我的问题

我们有什么方法可以在循环中创建这种锯齿状数组,这样我所要做的就是说FieldInfo:=MyArray

2 个答案:

答案 0 :(得分:8)

您可以将数组分配给数组项,如下所示:

Dim n As Long
n = 0
ReDim MyArray(2700 \ 60)
For i = 0 To 2700 Step 60
    MyArray(n) = Array(i, 1)
    n = n + 1
Next i

答案 1 :(得分:2)

你说得对。而不是添加到循环中的字符串,只需创建实际的数组项。

所以这就是你将拥有的:

Sub Sample()
    Dim ws As Worksheet
    Dim MyArray(20) As Variant      '<-- specify the number of items you want
    Dim i As Long

    For i = 0 To UBound(MyArray)
         MyArray(i) = Array(i * 60, 1)
    Next

    Set ws = ThisWorkbook.Sheets("Sheet1")
    ws.Columns(1).TextToColumns _
        Destination:=Range("A1"), _
        DataType:=xlFixedWidth, _
        FieldInfo:=MyArray, _
        TrailingMinusNumbers:=True
End Sub