當前位置:首頁 > 科技 > 正文

VBA簡單入門31:Redim語句,數組的裁剪和擴展


1、 截取部分數組數據

一碗水,我們可以倒出一半或三分之一。同樣,數組裡面的數據,當不需要全部輸出到工作表的時候,我們也可以自定義地決定輸出多少數據。

如下面代碼,将一個10行3列的數組,從數組下标開始(相當于我們看到的數組的上部)截取5行2列的部分。

如将10行3列數組輸出到工作表的時候,Resize設定的範圍是11行4列,那麼多出的數組空間部分将趕回錯誤#N/A。

存放數據數據的單元格區域範圍卻不能比數組大。


數組在内存中可以像單元格一樣自由修改數據。如,Cell(1,1)=''A''表示單元格A1的值為A;

arr(1,1)=''A''表示數組左上角第一個單元格的值為A。

遍曆二維數組就相當于遍曆單元格區域一樣,對其賦值、修改内容都和單元格操作沒有多大區别。

下面代碼,提取數組arrA列為C的數據,用K計算其條數,然後将數據放在自身的上部存儲,輸出的時候隻輸出K值截取的部分。

A1:C10是原始的數組arr,E1:G10是提取數據後修改了的數組arr,但在輸出數據的時候,使用Resize隻輸出E1:G10上部的無填充顔色部分E1:G2(黃色部分沒有輸出到工作表,寫上隻為參考),也就是K值标記的部分。

這樣,我們就運用數據完成了數據的篩選。

當然,我們也可以用一個新的數組brr來裝入C的數據。見下面例子。

二、使用Redim語句設定數組的大小。

通常我們要裝行李物品,肯定是找足夠大的行李箱來裝。同樣我們可以使用Redim語句來定義一個足夠大的數據,用來存儲處理後的數據。這裡要注意的是,如下面代碼中的brr(),這裡的括号不能省略,否則就不是數組,而是變體變量,不能是使用Redim語句。

本例中數組brr是下圖這個樣子,隻有K值的部分有數據,黃色部分空白。

但我們隻輸出其前2行數據到工作表中。

Redim後的數組,其數據都會被清空,而且大小和緯度數都可以改變。

二維數組Redim為一維數組

二維數組改變大小

三、使用Redim Preserve擴展數據的 最後一維度大小,并保留原來的數據。

同樣以上面的例子來作演示,這次我們先不設定數組brr的大小,而是在數組處理數據的時候,根據K值來擴展brr的大小。

這相當于我們蓋廠房,開始是1000平,不夠用了,就擴建到2000平。

下面代碼同樣可以達到上面代碼的效果。

在數組brr還沒有轉置的時候,brr是一個3行2列的數組。

轉置後,成為2行3列的數組,輸出到工作表中。

使用Redim Preserve需要轉置函數Transpose,因為其受到Transpose的限制(該問題見上一章)。本人習慣于先Redim設定一個足夠大數組來處理實際問題。

最後,Redim了數組的大小就不能夠使用Redim Preserve,否則會報錯,提示下标越界。

你可能想看:

有話要說...

取消
掃碼支持 支付碼