VBA筆記
宣告與初始化變數
Excel VBA 中的變數宣告是使用 Dim
與 As
兩個關鍵字,分別指定變數名稱以及變數的類型,例如宣告一個整數類型的變數 x
:
Dim x As Integer
萬用類型變數
一種可以儲存任何資料的類型,其稱為 Variant
常數
把這種固定的變數加上 Const
,宣告為常數
算術運算子
運算子 說明 優先順序
Dim a, b As Integer, c As Double
a = 5
b = 10
c = a + b ' 加法
c = a - b ' 減法
c = a * b ' 乘法
c = b / a ' 除法
c = b Mod a ' 餘數
c = b ^ a ' 次方
字串運算
&
串接兩個字串
If Then
與 Else
Dim rainProb As Double
rainProb = 0.3 ' 降雨機率
If rainProb > 0.7 Then
MsgBox "帶雨傘出門"
ElseIf rainProb > 0.3 Then
MsgBox "丟銅板決定要不要帶雨傘"
Else
MsgBox "不用帶雨傘出門"
End If
Select Case
就是switch概念
If版本
Dim x As Integer
x = 7
If x <= 5 Then
MsgBox "Case 1"
ElseIf x = 6 Or x = 8 Then
MsgBox "Case 2"
ElseIf x = 7 Or x = 9 Then
MsgBox "Case 3"
ElseIf x = 10 Then
MsgBox "Case 4"
Else
MsgBox "Case 5"
End If
select case版本
Dim x As Integer
x = 7
Select Case x
Case Is <= 5
MsgBox "Case 1"
Case 6, 8
MsgBox "Case 2"
Case 7, 9
MsgBox "Case 3"
Case 10
MsgBox "Case 4"
Case Else
MsgBox "Case 5"
End Select
兩段程式碼效果一樣
迴圈
VBA 中的迴圈主要可分為 For Loop
、For Each
與 Do Loop
這幾種
For Loop
For Loop
迴圈主要用於已知重複次數的問題,也就是在執行迴圈之前,就已經事先知道要執行幾次
For 迭代變數 = 開始值 To 結束值
運算內容
Next 迭代變數
計算從 1
到 10
總和的範例:
Dim i, s As Integer
s = 0
For i = 1 To 10
s = s + i
Next i
MsgBox "s = " & s
Exit For
中斷迴圈
如果想要中途跳出迴圈,可以加上 Exit For
來中斷迴圈:
Dim i, s As Integer
s = 0
For i = 1 To 10
s = s + i
If i >= 4 Then
Exit For ' 中斷迴圈
End If
Next i
MsgBox "s = " & s
For Each
For Each
是 For Loop
的另外一種精簡寫法,兩者功能差不多
一般若要使用 For Loop
迴圈對陣列中的每個元素逐一處理時,必須明確指定開始與結束的索引值,再以索引值取出陣列中的元素做進一步的運算,而 For Each
則是可以自動將陣列中的元素逐一取出,放進迴圈的迭代變數中處理,這樣的寫法會比 For Loop
更精簡
使用 For Each
迴圈找出目前 Excel 中所有工作表的範例程式:
Dim wSheet As Worksheet
For Each wSheet In Worksheets
MsgBox "找到工作表: " & wSheet.Name
Next wSheet
Do Loop
Do Loop
可以重複執行某一段程式碼,直到指定的條件判斷式成立或是不成立的時候,才停止迴圈的執行,有好幾種不同的型式
Do While Loop
在每一次運行時,檢查一個指定的條件判斷式,如果成立的話(判斷為 True
)就會繼續執行,而如果條件不成立(判斷為 False
)的話,就會中止迴圈
Do While 條件判斷式
運算內容
Loop
計算 1
到 10
總和:
Dim i, s As Integer
s = 0
i = 1
Do While i <= 10
s = s + i
i = i + 1
Loop
MsgBox "s = " & s
While
的條件判斷式也可以放在迴圈結尾處,這樣的話迴圈在執行時就會先執行第一次的迭代,執行完第一次之後才判斷是否要繼續執行下一次的迭代
Do
運算內容
Loop While 條件判斷式
Do Until Loop
Do Until Loop
迴圈與 Do While Loop
迴圈在條件的判斷上剛好相反,Do Until Loop
迴圈會在指定條件不成立(判斷為 False
)時繼續執行,當判斷條件成立時(判斷為 True
)則終止迴圈。
Exit Do
中斷迴圈
如果要在 Do Loop
迴圈執行到一半時終止迴圈的執行,可以在迴圈中加入 Exit Do
,以下是一個範例:
Dim i, s As Integer
s = 0
i = 1
Do Until i > 10
s = s + i
i = i + 1
If i > 4 Then
Exit Do ' 中斷迴圈
End If
Loop
MsgBox "s = " & s