vba 跳出for循环_VBA简单入门08:For循环
1、循環的作用和原理
作用:用來有效地重復執行相同或者相似的操作。Sub vv()
Dim i As Long
i = 0
i = i + 1
i = i + 1
i = i + 1
i = i + 1
i = i + 1
MsgBox i
End Sub
上面代碼,每句 i=i+1執行后,i 都在原來的基礎上加上 1。因此最后 i=5。
顯然,i=i+1這5句代碼都是重復的操作。假如要執行 【 i=i+1】 100次、1000次,那代碼得需要寫多長?
于是,就有了循環。For循環是一個結構,For開始,Next結尾。Dim i As Long
Dim x As Long '循環次數
i = 0
For x = 1 To 5
i = i + 1
Next
如上面的代碼,For x = 1 To 5 表示循環是從1-5執行5次,表示執行了5次 i=i+1 這樣的操作。
For循環的原理:For循環實際上是內置了一個看不到的計數器,當x=1時,執行 i=i+1 完畢后,Next會自動進入下一次循環(內置計數器計數記錄),下一次 x=2 ,執行 i=i+1 完畢后,再下一次 x=3.....如此循環重復,直到循環結束,就是x=6(超過5)的時候結束。如下面的gif圖。
2、For循環的步長。
步長就是我們軍訓排隊時,教官號令報數,單數出列。單數1、3、5、7.....之間都相差 2,這就是步長。
如,現在我們要在A1:A10單元格區域,依次選擇單數A1、A3、A5......A9。步長是使用要在For語句后面寫上
Step 步長值。Dim i As Long
For i = 1 To 10 Step 2 '步長為2
Cells(i, 1).Select
Next
上面代碼 i 的值變化依次是1、3、5、7、9。
實際上 For x = 1 To 5 是省略了步長 Step 1 的,默認步長是1的情況下可省略。
3、For循環的方向
一般循環的方向是從上到下的,但也可以從下到上。VBA刪除行就是一個典型的例子。
下面例子,刪除A1:A12中空單元格所在的行。
如果需要從下到上循環,注意兩點:
1、For i = 12 To 1 而不是 For i = 1 To 12
2、Step -1聲明方向,不可以省略。-1 是反方向的步長值,可以更改,但必須負整數。Sub gggg()
Dim i As Long
For i = 12 To 1 Step -1 '注意方向
If Range("a" & i) = "" Then
Range("a" & i).EntireRow.Delete '刪除整行
End If
Next
End Sub
4、循環的嵌套
正如 if結構可以嵌套,循環也可以。下面例子用兩個循環,一次填充數字1-10。
該代碼,先開始執行外循環(不執行完,一次一次來),然后執行完內循環(執行完5次),再進入下一次外循環,重復執行內循環.....
5、退出For循環
下面例子,H1:H6有6個姓名。我們需要在其中尋找“小喬”,一般情況下,找到小喬了,我們就會停止尋找動作,是不是?所以這里的循環次數并不是6次,而是4次,我們找到小喬后提前退出了。
if結構常常用來配合退出循環。退出循環的語句是Exit For。
Dim i As Long
For i = 1 To 6
If Cells(i, "h") = "小喬" Then
Cells(i, "h").Interior.ColorIndex = 3 '設置背景顏色
Exit For '退出循環
End If
Next
李白和百里玄策不管啦!
6、另一個For循環:For each.....Next
For each.....Next循環常常用來遍歷集合對象。Dim Sht As Worksheet
For Each Sht In Worksheets
Debug.Print Sht.Name
Next
代碼遍歷工作表集合,依次打印工作簿中每個工作表的名稱。
【小結】
這是簡單系列的第8篇文章,現在開始我們的VBA編程之旅了。
在現學到的知識范圍內,我們可以嘗試解決3個實際問題。
VBA其實真的很簡單!
例子1:高級篩選
代碼如下,僅供參考:Sub bb()
Range("a1:c1").Copy Range("j1") '復制標題
k = 1 '記錄行號
For i = 2 To 13 '循環遍歷數據
'如果部門是A且銷售額大于等于1500
If Cells(i, 1) = "A" And Cells(i, 3) >= 1500 Then
k = k + 1 '計數,輔助輸出數據到 j 列的單元格區域
'表格整行數據復制到 j 列相應單元格
Range(Cells(i, 1), Cells(i, 3)).Copy Cells(k, "j")
End If
Next
End Sub
篩選結果
例子2:簡易工資條制作
參考代碼:Sub vvvv()
Dim i As Long
Dim k As Long
k = 1 '行號計數
Range("j1:n100").Clear '清楚內容,方便更新數據
For i = 2 To 7 '遍歷工資表
Range("a1:e1").Copy Cells(k, "j") '標題
Range(Cells(i, 1), Cells(i, 5)).Copy Cells(k + 1, "j") '復制工資數據
k = k + 3 '工資條間隔
Next
End Sub
例子3:復雜一點的高級篩選(循環嵌套)
要求:提取部門為A且銷售額大于等于1500的數據+部門為C且銷售額大于等于3000的數據。
參考代碼:Sub bb()
Range("a1:c1").Copy Range("j1") '復制標題
k = 1 '記錄行號
For x = 2 To 3 '遍歷篩選條件要求的部門
'//先提取A部門符合要求的數據,再提取C部門符合要求的數據
For y = 2 To 13 '循環遍歷表格數據
'Cells(x, "f") 為篩選條件的部門,Cells(x, "g")為篩選條件的銷售額
If Cells(y, 1) = Cells(x, "f") And Cells(y, 3) >= Cells(x, "g") Then
k = k + 1 '計數,輔助輸出數據到 j 列的單元格區域
'表格整行數據復制到 j 列相應單元格
Range(Cells(y, 1), Cells(y, 3)).Copy Cells(k, "j")
End If
Next
Next
End Sub
結果
希望大家可以愉快的入門VBA!
總結
以上是生活随笔為你收集整理的vba 跳出for循环_VBA简单入门08:For循环的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python把桢写入txt_Java 字
- 下一篇: 用python重复下载文件_python