For Each……Next在一個集合或數組中遍歷循環一次,每循環一次都會把當前循環到的對象或元素賦值給變量。
遍歷對象
例如:下面的例子會有B2到E11的區域,查找值大於等於90的單元格,如果找到則計數變量加1,並把其內容字符加粗,字體顏色改為紅色
Sub find90()
Dim a As Integer, X As Range
a = 0
For Each X In Range("B2:E11")
If X.value >= 90 Then
a = a + 1
X.Font.Bold = True
X.Font.Color = RGB(255, 0, 0)
End If
Next
MsgBox "共有" & a & "個符合條件的數據,已為其設置了背景色以便區分"
End Sub
遍歷數組
下面的代碼定義一個26個元素的數組,數組下標是從0開始的,0-25個就是26個元素。然後在每個元素中循環一次,並且將大寫字母A到Z的26個字母賦值給數組裡的26個元素,並且把26個元素讀取出來,連成一串字符在消息框中顯示。這裡是通過Chr轉換函數將相應的數值轉為對應的字母。
Sub AtoZ()
Dim a(25) As String, i As Integer, t As String
t = ""
For i = 0 To 25
a(i) = Chr(i + 65)
t = t & a(i)
Next
MsgBox t
End Sub
下面代碼查找當前工作薄共有多少個工作表,其中已經使用的工作表有多少個
Sub countusedsheet()
ActiveSheet.usedrange.SpecialCells(11).Select
a = Sheets.Count '統計當前工作薄有幾個工作表
For i = 1 To a
r = Sheets(1).usedrange.SpecialCells(11).Row
'已使用區域最後一行
c = Sheets(1).usedrange.SpecialCells(11).Column
'已使用區域最後一列
If r > 1 Or c > 1 Then
X = X + 1
End If
Next
MsgBox "當前工作薄共有" & a & "個工作表,其中" & X & "個工作表已使用"
End Sub
中途退出For Each......next循環
可以使用Exit For 或 goto 語句退出
例子:
Sub findN()
Dim X As Range,a as string
For Each X In Range("B2:E11")
If X.value = "李珊" Then
X.Font.Bold = True
X.Font.Color = RGB(255, 0, 0)
a=x.address(flass,flass)
MsgBox "已找到第一個符合條件的數據,它在" & a & "單元格" & chr(13) & "現在退出查找,後面符合條件的單元格D10也不會被找到。"
exit for
End If
Next
End Sub