本篇介紹 Excel VBA 中各種條件判斷式的使用方法,包含 If ThenElseSelect Case

電腦在執行程式時,都是依照順序一行接著一行的執行,如果我們希望程式在執行時,依據不同的條件狀況來做出不一樣的動作,這時候就可以利用條件判斷式來處理。

If ThenElse

我們來看一個簡單的實例,這是在早上出門前決定要不要帶雨傘出門的一個狀況,如果我們看完天氣預報之後,以降雨機率 60% 作為標準,超過這個值我們就帶傘出門,我們的判斷邏輯就會像這樣:

如果 降雨機率 > 60% 則:
帶雨傘出門
否則:
不用帶雨傘出門

這種情境就是一個典型的條件判斷式,在 Excel VBA 中我們可以用 If ThenElse 把這個判斷邏輯寫成程式,讓電腦幫我們做判斷:

Dim rainProb As Double
rainProb = 0.3 ' 降雨機率
If rainProb > 0.6  Then
  MsgBox "帶雨傘出門"
Else
  MsgBox "不用帶雨傘出門"
End If

這樣這段 VBA 程式就會依據 rainProb 的值來決定是否要帶雨傘。

excel-vba-programming-if-then-else-condition-20161202-1

If ThenElse

如果我們的條件判斷邏輯不是二選一的時候,狀況就會稍微複雜一些,例如:

如果 降雨機率 > 70% 則:
帶雨傘出門
如果 30% < 降雨機率 ≤ 70%
丟銅板決定要不要帶雨傘
否則:
不用帶雨傘出門

這時候我們可以再加入 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 值。

excel-vba-programming-if-then-else-condition-20161203-1

用 Excel VBA 計算 BMI

這個使用 VBA 計算 BMI 的範例 Excel 檔案可以從這裡下載:excel_vba_bmi_example.xlsm

參考資料:ExcelFunctions.netExcel Easy