2013年1月19日 星期六

VBA 小學堂-變數與儲存格的搭配應用

變數在 VBA 中其實算是一個很抽象的概念

幾米蘇看得 VBA 相關書籍裡面是這樣寫的:

"變數" 像是一個容器,是用來存放所查詢到的屬性值或是計算結果,且名稱可以任意自訂

(是不是給他很抽象 @@”,好吧或許有人看得懂)

用個實例來說明大家 "可能" 會比較了解一點

A=B.屬性

其中 "A” 就是變數 (等號的左邊),B 就是所謂的 "查詢到的屬性"

譬如說以下的例子

image

打開 VBA 撰寫視窗

並在裡面寫入以下程式碼

Sub test()
A = Sheets(1).Range("A3").Value
MsgBox (A)
End Sub

並按下 "F8" 可以將程式碼逐行執行

(這個功能在程式碼有出錯的時候,可以用來找錯誤或邏輯不對的地方在哪,我很常用 @@”)

image

按兩下讓黃色箭頭到  A = Sheets(1).Range("A3").Value 之後

這時候把滑鼠移到 "A" 的位置

這時候你會看到 A=3,也就是儲存格 A3 所有的值

最後的 Msgbox(A) 的意思,是把 A 的搜尋結果以一個小視窗顯示出來 (如下圖)

image 

(Msgbox 也常常用來檢查變數)

在這段程式碼裡面,XXXXX.Value 的 .Value 就是一種屬性 (Value 代表 "值")

那大家在中間加一段 A=4 來看看 (如下)

Sub test()
A = Sheets(1).Range("A3").Value
A = 4
MsgBox (A)
End Sub

執行結果就會變 4

image

(好像在說廢話 XD)

這邊主要是要講一個觀念

就是變數 (大多時候是在等號的左邊),是個隨時可以改變的數值

再來談談變數跟儲存格之間的搭配

上一篇有提到 Range() 及 Cells() 的差別

先來看看單獨使用 Range() 的例子好了

先開個新的 Excel 活頁簿

然後在 A1-A11 輸入 1-11 數值

image

接著寫以下程式碼

(這邊為了避免搞混,把變數設為 i)

Sub test()
i = Selection.Value
Range("B1", "B" & i).Select
End Sub

接著把儲存格選到 A1-A11 其中一個

image

執行巨集之後會發現

B1-B11 儲存格被選起來了

原理其實很簡單,因為此時變數 i=11

所以在最後一行程式碼會等同於 Range(“B1”,"B11”).Select

以此類推嚕

再來看看單獨使用 Cells()

Sub test()
i = Selection.Value
Cells(i, 2).Select
End Sub

一樣儲存格選到 A1-A11 其中一個

接值執行看看

image

會發現執行之後儲存格會往右 (往 B) 的方向移動一格

接下來試試 Range() 配合 Cells()

Sub test()
i = Selection.Value
Range(Cells(i, 2), Cells(2, i)).Select
End Sub

此時將數字選到 11 (A11) 後執行

image 

知道為啥會有這樣的結果嗎?

各位可以先想一想再看後面的解說

此時因為 i=11,所以 Range (Cells(11,2),Cells(2,11)) = Range(“B11”,"K2")

也就是說 B11:K2 的範圍會被選擇起來

變數及儲存格的利用幾乎是所有 VBA 轉寫程式的根本

可以根據需求設定不同的變數,來達到最有效率的工作

而每個巨集會隨著撰寫者的 "創意" 發展出相當多的變化

同樣的執行結果,也會因為不同的設計有不同的寫法嚕

這就是 VBA 的困難也是好玩的地方

大家可以多多練習一下變數的應用喔~

對於 VBA 的撰寫非常有幫助的

1 則留言:

Related Posts Plugin for WordPress, Blogger...