Excel VBA 數組基礎(一)

上一篇文章,同樣一段的程序,應用的常規的解法已經數組的解法,今天開始解密數組。

數組概念

數組就是一個列表或者一組數據表。它是由連續可索引的具有相同內在數據類型的元素所組成的集合,數組中每一個元素都具有唯一的索引號。更改其中一個元素並不會影響到其它元素。

數組存在內存,可以利用索引號獲取該集合中每一個子集。

我個人認為,數組可以理解為一個虛擬的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

Excel VBA 數組基礎(一)

[{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


分享到:


相關文章: