變數在 VBA 中其實算是一個很抽象的概念
幾米蘇看得 VBA 相關書籍裡面是這樣寫的:
"變數" 像是一個容器,是用來存放所查詢到的屬性值或是計算結果,且名稱可以任意自訂
(是不是給他很抽象 @@”,好吧或許有人看得懂)
用個實例來說明大家 "可能" 會比較了解一點
A=B.屬性
其中 "A” 就是變數 (等號的左邊),B 就是所謂的 "查詢到的屬性"
譬如說以下的例子
打開 VBA 撰寫視窗
並在裡面寫入以下程式碼
Sub test()
A = Sheets(1).Range("A3").Value
MsgBox (A)
End Sub
並按下 "F8" 可以將程式碼逐行執行
(這個功能在程式碼有出錯的時候,可以用來找錯誤或邏輯不對的地方在哪,我很常用 @@”)
按兩下讓黃色箭頭到 A = Sheets(1).Range("A3").Value 之後
這時候把滑鼠移到 "A" 的位置
這時候你會看到 A=3,也就是儲存格 A3 所有的值
最後的 Msgbox(A) 的意思,是把 A 的搜尋結果以一個小視窗顯示出來 (如下圖)
(Msgbox 也常常用來檢查變數)
在這段程式碼裡面,XXXXX.Value 的 .Value 就是一種屬性 (Value 代表 "值")
那大家在中間加一段 A=4 來看看 (如下)
Sub test()
A = Sheets(1).Range("A3").Value
A = 4
MsgBox (A)
End Sub
執行結果就會變 4
(好像在說廢話 XD)
這邊主要是要講一個觀念
就是變數 (大多時候是在等號的左邊),是個隨時可以改變的數值
再來談談變數跟儲存格之間的搭配
在上一篇有提到 Range() 及 Cells() 的差別
先來看看單獨使用 Range() 的例子好了
先開個新的 Excel 活頁簿
然後在 A1-A11 輸入 1-11 數值
接著寫以下程式碼
(這邊為了避免搞混,把變數設為 i)
Sub test()
i = Selection.Value
Range("B1", "B" & i).Select
End Sub
接著把儲存格選到 A1-A11 其中一個
執行巨集之後會發現
B1-B11 儲存格被選起來了
原理其實很簡單,因為此時變數 i=11
所以在最後一行程式碼會等同於 Range(“B1”,"B11”).Select
以此類推嚕
再來看看單獨使用 Cells()
Sub test()
i = Selection.Value
Cells(i, 2).Select
End Sub
一樣儲存格選到 A1-A11 其中一個
接值執行看看
會發現執行之後儲存格會往右 (往 B) 的方向移動一格
接下來試試 Range() 配合 Cells()
Sub test()
i = Selection.Value
Range(Cells(i, 2), Cells(2, i)).Select
End Sub
此時將數字選到 11 (A11) 後執行
知道為啥會有這樣的結果嗎?
各位可以先想一想再看後面的解說
此時因為 i=11,所以 Range (Cells(11,2),Cells(2,11)) = Range(“B11”,"K2")
也就是說 B11:K2 的範圍會被選擇起來
變數及儲存格的利用幾乎是所有 VBA 轉寫程式的根本
可以根據需求設定不同的變數,來達到最有效率的工作
而每個巨集會隨著撰寫者的 "創意" 發展出相當多的變化
同樣的執行結果,也會因為不同的設計有不同的寫法嚕
這就是 VBA 的困難也是好玩的地方
大家可以多多練習一下變數的應用喔~
對於 VBA 的撰寫非常有幫助的
謝謝,很棒的分享~~
回覆刪除