作者:iamlaosong
將工作表中的數據賦給數組或者將數組的數據賦給工作表,一般有兩種。一種是循環的方法,一個一個的傳,這樣的方法一般用於須要對每一個數據特別處理的場合,還有一種是一次性用賦值語句傳,就速度來說,另外一種方法要快得多。看以下例程:
Sub tt() Dim arr1(240000, 4) Dim arr2() lineno = [A1048576].End(xlUp).Row '行數 '循環給數組賦值。數組myarr必須先定義大小 t1 = Now() For i = 3 To lineno k = i - 2 arr1(k, 1) = Cells(i, 1) arr1(k, 2) = Cells(i, 2) arr1(k, 3) = Cells(i, 3) arr1(k, 4) = Cells(i, 4) Next i t2 = Now() Cells(2, 5) = TimeValue(t2) - TimeValue(t1) '一次性給數組賦值。數組arr不能定義大小和類型 t1 = Now() arr2 = Range("a3:d" & lineno) t2 = Now() Cells(2, 6) = TimeValue(t2) - TimeValue(t1) MsgBox arr1(20000, 2) & "=" & arr2(20000, 2) End Sub
只是要注意的是,循環賦值的方法數組必須先定義維數和大小,然后才干使用,而一次性賦值的正好相反。不能定義維數和大小,否則會報錯。此外注意,數據一次性讀入數組arr2后。arr2成為一個二維數組。即使是讀取一列數據。也是二維數組,數組下標都是從1開始,即arr2(1,1),arr2(2,1),arr2(3,1),arr2(4,1),。。
。
另一點要注意,當讀取的工作表非當前工作表時。range對象后面須要加上valuekeyword,否則會報錯,比如:
'方法一:直接讀取 DaiLiNo = Sheets("代理點").[B65536].End(xlUp).Row '行數 DaiLiName = Sheets("代理點").Range("B2:B" & DaiLiNo).Value '方法二:激活工作表后讀取 Worksheets("代理點").Select DaiLiNo = [B65536].End(xlUp).Row '行數 DaiLiName = Range("B2:B" & DaiLiNo) DaiLiNo = DaiLiNo - 1 '數據從第2行開始,所以總數量要減一
假設賦值范圍用行列號表示,則用下列語句(pos_fst, pos_ems是兩個參數,各自是數據起始行和數據所在列):
maxrow = Cells(65536, pos_ems).End(xlUp).Row
Mail = Range(Cells(pos_fst, pos_ems), Cells(maxrow, pos_ems))