Excel VBA 程式設計教學:條件判斷式,If Then、Else 與 Select Case

本篇介紹 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

更多關於 VBA 的教學文章,請參考 VBA 程式設計

參考資料:ExcelFunctions.netExcel Easy

Windows, 程式設計

10 留言

  1. 陳大川

    感謝分享,灰熊有條理、清楚!

  2. .陳光華

    感謝分享,黑熊有條理、清楚!

  3. 陳紹興

    感謝分享,北極熊有條理、清楚!

  4. 陳高粱

    感謝分享,無尾熊有條理、清楚!

  5. WS

    感謝分享,趴趴熊有條理、清楚!

  6. Henry

    感謝分享,拉拉熊有條理、清楚!

  7. 陳大天

    感謝分享,趴趴熊有條理、清楚!

  8. 朋仔

    感謝分享,福利熊有條理、清楚!

  9. 詹城五

    感謝分享,熊熊有條理、清楚!

  10. 大藍帕

    感謝分享,金熊有條理、清楚!

Leave a Reply