VBA基礎 - 分支和循環

概要

編程語言的基礎除了數據類型, 就是控制結構了. 所謂控制結構, 主要就是分支和循環.編程

分支

廢話不說, 直接示例代碼:編程語言

單條件判斷

1  Sub Test()
2   If 2 > 1 Then
3       Debug.Print "xxxx"
4   End If
5  End Sub

執行後輸出:oop

xxxx

多條件判斷

  1. if-elseif-else 結構code

    1  Option Explicit
     2  
     3  Sub Test()
     4      score 55
     5      score 65
     6      score 85
     7      score 95
     8  End Sub
     9  
    10  Function score(points As Integer)
    11  
    12      If points > 0 And points < 60 Then
    13          Debug.Print "不及格"
    14      ElseIf points > 80 And points < 90 Then
    15          Debug.Print "良好"
    16      ElseIf points >= 90 Then
    17          Debug.Print "優秀"
    18      Else
    19          Debug.Print "及格"
    20      End If
    21  
    22  End Function

    輸出結果:ci

    不及格
          及格
          良好
          優秀
  2. select-case 結構it

    1  Option Explicit
     2  
     3  Sub Test()
     4      score 55
     5      score 65
     6      score 85
     7      score 95
     8  End Sub
     9  
    10  Function score(points As Integer)
    11  
    12      Select Case points
    13          Case 90 To 100
    14              Debug.Print "優秀"
    15          Case 80 To 90
    16              Debug.Print "良好"
    17          Case 60 To 80
    18              Debug.Print "及格"
    19          Case 0 To 60
    20              Debug.Print "不及格"
    21      End Select
    22  
    23  End Function

    輸出結果:io

    不及格
          及格
          良好
          優秀

異常處理

其實異常處理, 也是一種條件判斷, 只不過只將異常做爲條件class

1  Option Explicit
 2  
 3  Sub Test()
 4      Dim x As Integer
 5  
 6      On Error GoTo finally
 7          x = 10 / 0
 8  
 9  finally:
10      Debug.Print "發生錯誤"
11  
12  End Sub

輸出結果:基礎

發生錯誤

循環

for-next

1  Option Explicit
 2  
 3  Sub Test()
 4      Dim n As Integer
 5  
 6      Debug.Print "打印 1 ~ 10 的奇數"
 7      For n = 1 To 10 Step 2
 8          Debug.Print n
 9      Next n
10  
11  End Sub

執行結果:select

打印 1 ~ 10 的奇數
1
3
5
7
9

for-each-next

1  Option Explicit
 2  
 3  Sub Test()
 4      Dim n As Variant
 5  
 6      Debug.Print "打印 1 ~ 10 的奇數"
 7      For Each n In Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
 8          If Not n Mod 2 = 0 Then
 9              Debug.Print n
10          End If
11      Next
12  
13  End Sub

執行結果:

打印 1 ~ 10 的奇數
1
3
5
7
9

do-loop-until

1  Option Explicit
 2  
 3  Sub Test()
 4      Dim n As Integer
 5  
 6      Debug.Print "打印 1 ~ 10 的奇數"
 7      Do
 8          n = n + 1
 9  
10          If Not n Mod 2 = 0 Then
11              Debug.Print n
12          End If
13      Loop Until n >= 10
14  
15      n = 0
16  
17      Debug.Print "打印 1 ~ 10 的奇數"
18      Do Until n >= 10
19          n = n + 1
20  
21          If Not n Mod 2 = 0 Then
22              Debug.Print n
23          End If
24      Loop
25  
26  End Sub

執行結果:

打印 1 ~ 10 的奇數
   1
   3
   5
   7
   9
  打印 1 ~ 10 的奇數
   1
   3
   5
   7
   9

上例中, until 的位置對循環的影響:

  1. until 在 Do 後面: 先進行判斷, 再運行循環體
  2. until 在 Loop 後面: 先運行循環體, 再進行判斷

示例:

1  Option Explicit
 2  
 3  Sub Test()
 4      Dim n As Integer
 5  
 6      n = 0
 7      Do
 8          Debug.Print "會運行"
 9      Loop Until n = 0
10  
11      n = 0
12      Do Until n = 0
13          Debug.Print "不會運行"
14      Loop
15  
16  End Sub

執行結果以下:

會運行

do-loop-while

1  Option Explicit
 2  
 3  Sub Test()
 4      Dim n As Integer
 5  
 6      Debug.Print "打印 1 ~ 10 的奇數"
 7      Do
 8          n = n + 1
 9  
10          If Not n Mod 2 = 0 Then
11              Debug.Print n
12          End If
13      Loop While n < 10
14  
15      n = 0
16  
17      Debug.Print "打印 1 ~ 10 的奇數"
18      Do While n < 10
19          n = n + 1
20  
21          If Not n Mod 2 = 0 Then
22              Debug.Print n
23          End If
24      Loop
25  
26  End Sub

執行結果和 until 同樣:

打印 1 ~ 10 的奇數
   1
   3
   5
   7
   9
  打印 1 ~ 10 的奇數
   1
   3
   5
   7
   9

while vs until:

  • while 是知足條件運行循環體
  • until 是知足條件退出循環體
相關文章
相關標籤/搜索