2014-10-27 39 views
8

Tôi có gìMảng răng cưa trong dữ liệu | Văn bản tới các cột

Hãy lấy một ví dụ về mã này hoạt động.

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 

Những gì tôi muốn

Trong một tập nhỏ dữ liệu, các mã trên hoạt động. Nhưng nếu tôi muốn đi lên để nói Array(2700,1)? Điều này có nghĩa tôi sẽ phải viết nó 46 lần Array(0, 1), Array(60, 1)...Array(1080, 1)....Array(2700, 1)

Những gì tôi đã cố gắng

Tôi đã cố gắng sử dụng phương pháp này

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 

Rõ ràng rằng sẽ không làm việc như Array(i,1) được lưu giữ như là một chuỗi trong .

My Câu hỏi

Có cách nào chúng ta có thể tạo ra loại đó của mảng lởm chởm trong một vòng lặp để tất cả tôi phải làm là nói FieldInfo:=MyArray

Trả lời

8

Bạn có thể gán một mảng đến một mục mảng như vậy:

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! Tại sao tôi không nghĩ về điều đó: D –

+0

Cần phải chờ 4 phút trước khi tôi chấp nhận câu trả lời của bạn –

+0

Tôi không biết - Tôi hơi ngạc nhiên;) Tôi có thể chờ ... – Rory

1

Bạn đang chuẩn xác. Thay vì thêm vào chuỗi trong vòng lặp, chỉ cần tạo các mục mảng thực tế.

Vì vậy, đây là những gì bạn sẽ có:

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 Cảm ơn điều này cũng hoạt động. Mặc dù đó là một biến thể nhỏ về những gì Rory đã đề cập trong câu trả lời của anh –

Các vấn đề liên quan