上一篇文章,同樣一段的程序,應用的常規的解法已經數組的解法,今天開始解密數組。
數組概念
數組就是一個列表或者一組數據表。它是由連續可索引的具有相同內在數據類型的元素所組成的集合,數組中每一個元素都具有唯一的索引號。更改其中一個元素並不會影響到其它元素。
數組存在內存,可以利用索引號獲取該集合中每一個子集。
我個人認為,數組可以理解為一個虛擬的Excel的表格,它把(數組)excel的數據,儲存在內存裡面,只是你看不見。
上一篇文章,就可以理解把A列到D列的數組,放在數組中,保存在內存中。
數組的兩個特點:
1、讀寫速度快
VBA讀取對象中的值永遠慢於讀取內存中的值。可以藉助VBA數組對程序提速。
2、無法永遠保存
數據存於工作表區域內,可以永久保存。但存入內存中的變量數組和常量數組卻受其作用域影響生命週期。
過程級別的私有數組變量或者常量數組在過程結束後會自動釋放,結束其生命週期;
而公有的變量數組和常量數組在excel應用程序關閉後會自動釋放。也就是重新啟動excel後,以前任何數組都不存在。
計算機的計算過程為:讀取硬盤裡的數據,通過內存,把數值傳給CPU裡面進行計算,計算完成後,再通過內存,保存在硬盤上。
上一邊文章的常規解法,就是按照上述的常規流程在運算。每一次運行都要進過上述5個步驟。
如果用了數組的解法,Excel放在硬盤的數組,被提取在內存裡面,然後傳給CPU進行計算,再傳給內存儲存。當運算全部完成後,再把內存的結果保存在硬盤上。
用數組進行運算,只有在第一提取,和最後一次保存時候,在與硬盤交流數據。但是常規的解法,每一次運算都要與硬盤傳遞數據,所以運算變慢。
數組分類
按照數組元素是否固定來分,可以分為靜態數組和動態數組;
按照數組維度來分,可以分為一維數組、二維數組等,最多隻能為60維。
數組的維度
數組可以是一維、二維直到六十維。而對於excel工作表來說,
excel 的每一行或者每一列就可以轉換成一維數組,而多行多列就可以轉換成二維數組。
二位以上的數組,很少在VBA的運算中出現,所以我們主講一維數組和二維數組。
1、一維數組
在數組公式中,在A1:F1區域中輸入數組公式:={1,2,3,4,5,6}
,然後按Ctrl Shift Enter,就可以在A1:F1之間得到了橫向區域的值。
在A1:A6區域中輸入數組公式:={1;2;3;4;5;6},然後按
Ctrl Shift Enter,就可以在A1:A6之間得到了縱向區域的值。
而VBA數組也可以得到同樣的效果:
2.1 VBA 代碼
Sub 數組()
Dim arr
arr = [{1,2,3,4}]
Range("a3:d3") = arr
End Sub
[{1,2,3,4}]代表是一維橫向數組。
需要注意的是VBA的一維數組,在Excel裡面表示的是一列數字,所以你用上述的代碼,把數組的內容寫到一行裡面,是可行的。但是如果你想把一維數組寫到一行裡面,則需要對數組進行轉換。
Sub 數組()
Dim arr
arr = [{1,2,3,4}]
Range("a3:a6") = Application.WorksheetFunction.Transpose(arr)
End Sub
Application.WorksheetFunction.Transpose(arr)
Transpose函數,就可以對數組進行行列轉換
2、二維數組
對於三行三列的數組,我們可以使用數組公式:={1,1,1;2,2,2;3,3,3}
在VBA中也可以用數組表示一個二維數組,如下面例子
注意分割數組,用的是";"號
Sub 二維數組()
[A1:C3] = [{1,1,1;2,2,2;3,3,3}]
End Sub
閱讀更多 浮雲Excel分享 的文章