2014-10-29 55 views
0

我想從2個獨立的列中使用數據來定義一個2-d數組。該代碼當前僅將我的數組定義爲第一列(range1),而忽略第二列(range2)。這是由於我的一個錯誤,或者我可以不使用unionized(是正確的術語?)範圍來定義一個數組?你可以使用聯合範圍來定義一個數組嗎?

Sub define_array() 

Dim FTSE100() As Variant 

Dim wsh As Worksheet 

Dim range1 As Range 
Dim range2 As Range 
Dim finalrange As Range 

Dim a As Integer 
Dim finalrow As Integer 

' define array 

Set wsh = Sheet2 
wsh.Activate 

finalrow = Range("a1").End(xlDown).row 

Set range1 = Range(Cells(1, 1), Cells(finalrow, 1)) 
Set range2 = Range(Cells(1, 5), Cells(finalrow, 5)) 
Set finalrange = Union(range1, range2) 

' FTSE100 = finalrange 

' Sheet15.Range("A:B") = FTSE 100 

' Original code ended here 

ReDim FTSE100(1 To finalrange.Areas.Count) 

For a = 1 To finalrange.Areas.Count 
FTSE100(a) = finalrange.Areas(a) 
Next 

With Sheet15.Range("A:B") 
For a = 1 To .Columns.Count 
.Columns(a).Resize(UBound(FTSE100(a))).Value = FTSE100(a) 
Next 
End With 

End Sub 

這似乎已經做到了,謝謝你的幫助。

回答

1

你不能這樣做非常連續的範圍。

你可以儘管這樣做:

ReDim FTSE100(1 To finalRange.Areas.Count) 

For a = 1 To finalRange.Areas.Count 
    FTSE100(a) = finalRange.Areas(a) 
Next 

你就必須做一個類似的For ... Next循環寫入值

With Sheet15.Range("A:B") 
For a = 1 To .Columns.Count 
    .Columns(a).Resize(UBound(FTSE100(a))).Value = FTSE100(a) 
Next 
End With 

但現在,它照在我身上,你的問題真的是越來越簡單比這個:你只是想從一個uninionizd範圍複製值到另一個工作表。這很簡單,不需要中間數組變量FTSE100

Set range1 = Range(Cells(1, 1), Cells(finalrow, 1)) 
Set range2 = Range(Cells(1, 5), Cells(finalrow, 5)) 

Sheet15.Range("A:A") = range1 
Sheet15.Range("B:B") = range2 
+0

我試過了,它沒有拋出錯誤,但它也似乎沒有定義數組。現在,當我運行它時,沒有任何內容出現在表格15中,並嘗試從數組的msgbox值拋出錯誤。 – Kaz 2014-10-29 16:56:48

+0

然後你沒有嘗試它的權利。請修改您的Q以顯示您當前*試圖實施的代碼,然後我會看到看起來是什麼問題:) – 2014-10-29 16:59:23

+0

您也無法以這種方式寫出Sheet15。 – 2014-10-29 17:00:05

相關問題