2014-10-27 4 views
8

Was ichGezackte Arrays in Daten | Text in Spalten

haben wir ein Beispiel dieses Codes nehmen, die funktioniert.

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 

Was ich

In einer kleinen Gruppe von Daten will, der obige Code funktioniert. Aber was, wenn ich nach oben gehen möchte, um zu sagen? Das bedeutet, dass ich wird es schreiben 46 mal Array(0, 1), Array(60, 1)...Array(1080, 1)....Array(2700, 1)

Was ich

Ich habe versucht, mit diesem Ansatz

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 

Offensichtlich das wird nicht funktionieren, wie Array(i,1) versucht haben, wird als String gespeichert in .

Meine Frage

Gibt es irgendeine Art, wie wir diese Art von gezackter Arrays in einer Schleife erstellen können, so dass alles, was ich tun muß, ist sagen FieldInfo:=MyArray

Antwort

8

Sie ein Array mit einem Array-Elemente zuweisen wie folgt:

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 
+0

super! Warum habe ich nicht daran gedacht: D –

+0

Müssen warten 4 Minuten, bevor ich Ihre Antwort akzeptiere –

+0

Ich weiß nicht - ich war ein wenig überrascht;) Ich kann warten ... – Rory

1

Sie gehen richtig. Erstellen Sie keine Array-Elemente, sondern fügen Sie sie in eine Schleife ein.

So ist das, was Sie haben:

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 
+0

+ 1 Danke das funktioniert auch. Obwohl es eine leichte Variation dessen ist, was Rory in seiner Antwort erwähnt hat –