VBA 中的循環

在某些情況下,VBA 程序需要連續多次執行同一組操作(即多次重複同一代碼塊)。 這可以使用 VBA 循環來完成。

VBA 循環包括:

接下來,我們將仔細研究每個週期。

Visual Basic 中的 For 循環運算符

循環運算符的結構 在 Visual Basic 中,可以按以下兩種形式之一進行組織:作為循環 對於... 下一個 或者作為一個循環 為每個.

循環“為了……下一個”

週期 對於... 下一個 使用一個從給定範圍內依次取值的變量。 隨著變量值的每次變化,循環體中的動作都會被執行。 從一個簡單的例子中很容易理解:

對於 i = 1 到 10 總計 = 總計 + iArray(i) 下一個 i

在這個簡單的循環中 對於... 下一個 使用了變量 i, 依次取值 1, 2, 3, ... 10,對於這些值中的每一個,循環內的 VBA 代碼都會被執行。 因此,此循環對數組的元素求和。 數組 在變量中 Total.

在上面的例子中,沒有指定循環增量,所以要增加變量 i 從 1 到 10,默認為增量 1…但是,在某些情況下,需要為循環使用不同的增量值。 這可以使用關鍵字來完成 步驟如以下簡單示例所示。

For d = 0 To 10 Step 0.1 dTotal = dTotal + d Next d

因為在上面的例子中,增量步設置為等於 0.1, 那麼變量 d總計 對於循環的每次重複,取值 0.0、0.1、0.2、0.3、... 9.9、10.0。

要確定 VBA 中的循環步驟,可以使用負值,例如,如下所示:

對於 i = 10 To 1 Step -1 iArray(i) = i Next i

這裡的增量是 -1,所以變量 i 隨著循環的每次重複,取值 10, 9, 8, ... 1。

循環“每個人”

週期 為每個 類似於循環 對於... 下一個,但不是迭代計數器變量的值序列,而是循環 為每個 對指定對象組中的每個對象執行一組操作。 在以下示例中,使用循環 為每個 枚舉當前 Excel 工作簿中的所有工作表:

為工作表中的每個 wSheet 將 wSheet 調暗為工作表 MsgBox "Найден лист:" & wSheet.Name Next wSheet

循環中斷語句“Exit For”

操作者 退出 用於中斷循環。 一旦在代碼中遇到該語句,程序就結束循環的執行並繼續執行該循環之後的代碼中的語句。 例如,這可用於搜索數組中的特定值。 為此,使用循環掃描數組的每個元素。 找到所需元素後,無需查看其餘元素 - 循環被中斷。

運營商申請 退出 在以下示例中演示。 這裡循環迭代超過 100 個數組條目並將每個條目與變量的值進行比較 有效值...如果找到匹配項,則終止循環:

For i = 1 To 100 If dValues(i) = dVal Then IndexVal = i Exit For End If Next i

Visual Basic 中的 Do While 循環

週期 做一會兒 只要滿足指定的條件,就執行一段代碼。 下面是一個過程的例子 ,其中使用循環 做一會兒 不超過 1000 的斐波那契數按順序顯示:

'子程序輸出斐波那契數不超過 1000 Sub Fibonacci() Dim i As Integer '計數器指示元素在序列中的位置 Dim iFib As Integer '存儲序列的當前值 Dim iFib_Next As Integer '存儲下一個值序列的 Dim iStep As Integer '存儲下一個增量的大小 '初始化變量 i 和 iFib_Next i = 1 iFib_Next = 0 'Do While 循環將執行直到'當前斐波那契數的值大於 1000 Do While iFib_Next < 1000 If i = 1 Then '第一個元素的特殊情況 iStep = 1 iFib = 0 Else '在覆蓋之前保存下一個增量的大小 '序列的當前值 iStep = iFib iFib = iFib_Next End If '在列 A 中打印當前斐波那契數活動工作表 '在索引為 i 的行中 Cells(i , 1).Value = iFib '計算下一個斐波那契數並將元素位置索引增加 1 iFib_Next = iFib + iStep i = i + 1 Loop End Sub

在給定的示例中,條件 iFib_Next < 1000 在循環開始時檢查。 因此,如果第一個值 iFib_下一個 如果超過 1000 個,則永遠不會執行循環。

另一種實現循環的方法 做一會兒 - 不是將條件放在循環的開頭,而是放在循環的結尾。 在這種情況下,無論是否滿足條件,循環都會至少執行一次。

示意地,這樣的循環 做一會兒 最後要檢查的條件如下所示:

當 iFib_Next < 1000 時執行...循環

Цикл «Do until» в Visual Basic

週期 做直到 非常類似於循環 做一會兒: 循環體中的代碼塊反复執行,直到滿足指定條件(條件表達式的結果為 )。 在接下來的過程中 使用循環 做直到 從列中的所有單元格中檢索值 A 工作表,直到該列遇到一個空單元格:

iRow = 1 Do Until IsEmpty(Cells(iRow, 1)) '當前單元格的值存入數組dCellValues dCellValues(iRow) = Cells(iRow, 1).Value iRow = iRow + 1 循環

在上面的例子中,條件 IsEmpty(單元格(iRow,1)) 位於結構的開頭 做直到,因此如果第一個單元格不為空,則循環將至少執行一次。

但是,如循環示例中所示 做一會兒,在某些情況下,無論條件表達式的初始結果如何,循環都必須至少執行一次。 在這種情況下,條件表達式應該放在循環的末尾,如下所示:

做...循環直到 IsEmpty(Cells(iRow, 1))

發表評論