【问题标题】:Jagged Arrays in Data | Text To Columns数据中的锯齿状数组 |文本到列
【发布时间】:2014-12-22 14:20:47
【问题描述】:

我有什么

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

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

【问题讨论】:

    标签: vba excel jagged-arrays


    【解决方案1】:

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

    这就是你将拥有的:

    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
    

    【讨论】:

    • + 1 谢谢这也有效。虽然这与 Rory 在他的回答中提到的内容略有不同
    【解决方案2】:

    您可以像这样将数组分配给数组项:

    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
    

    【讨论】:

    • 超级!为什么我没有想到:D
    • ++ 第一个回答
    猜你喜欢
    • 2019-11-17
    • 2011-10-09
    • 1970-01-01
    • 2023-03-04
    • 2015-09-23
    • 2020-04-02
    • 1970-01-01
    • 2013-04-21
    • 2012-03-20
    相关资源
    最近更新 更多