本篇介紹 Excel VBA 中各種條件判斷式的使用方法,包含 If Then
、Else
與 Select Case
。
電腦在執行程式時,都是依照順序一行接著一行的執行,如果我們希望程式在執行時,依據不同的條件狀況來做出不一樣的動作,這時候就可以利用條件判斷式來處理。
If Then
與 Else
我們來看一個簡單的實例,這是在早上出門前決定要不要帶雨傘出門的一個狀況,如果我們看完天氣預報之後,以降雨機率 60% 作為標準,超過這個值我們就帶傘出門,我們的判斷邏輯就會像這樣:
這種情境就是一個典型的條件判斷式,在 Excel VBA 中我們可以用 If Then
與 Else
把這個判斷邏輯寫成程式,讓電腦幫我們做判斷:
Dim rainProb As Double rainProb = 0.3 ' 降雨機率 If rainProb > 0.6 Then MsgBox "帶雨傘出門" Else MsgBox "不用帶雨傘出門" End If
這樣這段 VBA 程式就會依據 rainProb
的值來決定是否要帶雨傘。
如果我們的條件判斷邏輯不是二選一的時候,狀況就會稍微複雜一些,例如:
這時候我們可以再加入 ElseIf
這個判斷式:
Dim rainProb As Double rainProb = 0.3 ' 降雨機率 If rainProb > 0.7 Then MsgBox "帶雨傘出門" ElseIf rainProb > 0.3 Then MsgBox "丟銅板決定要不要帶雨傘" Else MsgBox "不用帶雨傘出門" End If
If Then
的條件判斷式在執行時只會選擇第一個符合的條件來執行,而且在判斷條件時是有順序性的,以這個例子來說,首先會判斷第一個 If
條件是否成立,如果成立的話就會執行對應的動作,然後其他的 ElseIf
就不會再繼續判斷或執行了。
而如果第一個 If
不成立的話,才會繼續判斷 ElseIf
的條件,所以在這裡的 ElseIf
的條件中,雖然我們的判斷邏輯是 30% < 降雨機率 ≤ 70%
,不過因為這是在第一個 If
不成立的狀況下才會執行的判斷,所以這時候的 rainProb
一定是會小於或等於 0.7
,因此在這裡我們只需要寫另外一邊的判斷條件就夠了。
我們可以在 If Then
的條件判斷中加入多個 ElseIf
,程式在執行時會依照順序一個接著一個檢查每一個條件,找到符合的條件就會執行對應的動作,如果找到最後都沒有任何一個條件符合,就會執行 Else
的對應動作。
如果在條件不成立的時候,不需要執行任何動作,就可以把 Else
拿掉:
Dim x As Integer x = 8 If x > 5 Then MsgBox "x is greater than 5" End If
我們也可以將多組 If Then
的條件判斷式組合在一起,變成巢狀的判斷結構,處理更複雜的問題。
Dim rainProb As Double, trans As String rainProb = 0.7 ' 降雨機率 trans = "騎車" ' 交通方式 If rainProb > 0.6 Then If trans = "走路" Then MsgBox "帶雨傘出門" ElseIf trans = "騎車" Then MsgBox "穿雨衣出門" Else MsgBox "開車嗎?" End If Else MsgBox "什麼都不用帶" End If
Select Case
Select Case
的作用與 If Then
類似,不過它可以在判斷條件很多的時候,讓程式碼更簡潔。
我們先來看一個 If Then
的例子:
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
由於這個例子的判斷條件比較繁複,所以使用 If Then
的方式撰寫會有很多的 ElseIf
,這種狀況的話就可以用 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
這段 Select Case
版本的程式碼與上面 If Then
版本的程式碼兩者寫法不同,但是作用卻是完全一樣的,所以程式設計者可以依照自己的喜好與需求來選擇使用哪一種寫法。
以下是在 Excel 中使用 VBA 條件判斷式的一些實際的範例程式。
Dim weight, height, bmi As Double height = Range("A2").Value / 100 weight = Range("B2").Value bmi = weight / height ^ 2 Select Case bmi Case Is < 18.5 MsgBox "BMI = " & bmi & "(體重過輕)" Case Is < 24 MsgBox "BMI = " & bmi & "(體重正常)" Case Is < 27 MsgBox "BMI = " & bmi & "(體重過重)" Case Is < 30 MsgBox "BMI = " & bmi & "(輕度肥胖)" Case Is < 35 MsgBox "BMI = " & bmi & "(中度肥胖)" Case Else MsgBox "BMI = " & bmi & "(重度肥胖)" End Select
按照建立按鈕與巨集程式的方式,在 Excel 表格中建立一個按鈕,並且建立一個巨集函數,將上面的程式碼貼上去之後,就完成了一個 BMI 的計算工具了,只要輸入身高與體重之後,按下按鈕即可計算 BMI 值。
這個使用 VBA 計算 BMI 的範例 Excel 檔案可以從這裡下載:excel_vba_bmi_example.xlsm。
更多關於 VBA 的教學文章,請參考 VBA 程式設計。