excel中怎么做vba循環?前面我們介紹過Excel的對象模型及一些常用的對象,也解過對象變量的概念及聲明對象變量的方法。其實,在絕大多數情況下,我們都是通過使用Excel VBA操縱Excel對象來達到我們的目的。例如,我們可以操作工作表對象,為工作表命名、排序工作表、統計工作表個數;我們可以操作單元格對象,在單元格區域中填充內容、查找有指定內容的單元格;等等。
為方便操控Excel對象,VBA提供了For Each-Next結構,可以在對象組成的集合中循環,給集合中的所有對象執行操作,或者集合中滿足相關條件的對象執行操作。
使用For Each-Next結構,我們無需知道集合中對象的數目,只需要聲明相應的對象變量,編寫執行操作的指令。
For Each-Next結構的語法如下:
For Each 對象變量In 對象集合
[語句塊]
[Exit For]
[語句塊]
Next [對象變量]
說明:
按照慣例,方括號中的內容表示可選項。
對象變量在使用前需要進行聲明。
Exit For語句表示提前退出循環。
無需知道集合中的對象數目。
可以與其它語法結構相互嵌套。
下面通過示例來演示For Each-Next結構的使用。
示例1:下面的代碼遍歷當前工作簿中的工作表并依次顯示工作表的名字。
Sub ForEach1()
Dim wks As Worksheet ‘聲明工作表對象變量
‘遍歷工作表集合并依次顯示工作表的名字
For Each wks In Worksheets
MsgBox “工作表的名字是:”& wks.Name
Next wks
End Sub
示例2:通過改進上面的示例1,在顯示工作表名字時表明是第幾個工作表,最后統計出工作簿中的工作表數,代碼如下。
Sub ForEach2()
Dim wks As Worksheet ‘聲明工作表對象變量
Dim i As Long ‘聲明用于統計工作表數的變量
i = 0 ‘給變量賦初始值
For Each wks In Worksheets
i = i + 1
MsgBox “第” &i & “個工作表的名字是:” & wks.Name
Next wks
MsgBox “本工作簿共有” & i& “個工作表.”
End Sub
示例3:下面的代碼遍歷當前工作表的單元格區域A1:A5,并依次顯示每個單元格中的內容。
Sub ForEach3()
Dim cell As Range ‘聲明單元格對象變量
‘遍歷單元格區域A1:A5并依次顯示單元格內容
For Each cell In Range(“A1:A5”)
MsgBox cell.Value
Next cell
End Sub
示例4:下面的代碼與示例3的效果相同,但我們設置了代表單元格區域的對象變量并賦值,讓For Each結構在對象變量代表的區域內循環遍歷。
Sub ForEach4()
Dim cell As Range, rng As Range ‘聲明單元格對象變量
‘設置rng變量的值
Set rng = Range(“A1:A5”)
‘遍歷rng對象變量代表的單元格區域并依次顯示單元格內容
For Each cell In rng
MsgBox cell.Value
Next cell
End Sub
示例5:下面的代碼結合If-Then結構判斷滿足相應條件的單元格數。
如下圖所示,要統計成績大于80分的學生人數。
運行下面的代碼即可。
Sub ForEach5()
Dim cell As Range, rng As Range ‘聲明單元格對象變量
Dim i As Long ‘聲明計數變量
‘設置rng變量的值
Set rng = Range(“B2:B9”)
i = 0
‘遍歷rng對象變量代表的單元格區域
‘并判斷單元格中的值是否大于80
For Each cell In rng
If cell.Value > 80 Then
i = i + 1
End If
Next cell
MsgBox “共有” & i& “名學生超過80分.”
End Sub
代碼在For Each循環結構中使用If-Then語句來檢查每個單元格中的值,如果其值大于80,變量i就增加1。