VBA基础六:遍历、循环的实例DO....WHILE/UNTILL/LOOP
Do While...Loop 語句是條件為True時循環
Do until...Loop 語句是直到條件變成True時才停止循環
如果事先知道循環次數,應該使用For循環,據說它比Do循環速度快
不知道起點和終點,需要在循環內計算結果出來以后才能判斷是否該終止循環的,用Do Loop循環。反之,如果很明確需要循環計算的次數,則用For……Next……計量循環。
For 循環有兩種:
1. For Each a In C
遍歷集合C中所有a元素。當然毫無疑問也可以使用If Then Exit For隨時提前退出。
好處是不用設置循環計數變量。因此在很多確實需要遍歷全部元素的情況下,是效率最高的循環遍歷方式。
2.For i = a To b [Step c]
Next
和For Each 循環相比,因為有了計數器、計數變量i的使用,可以非常靈活和實用。實用之處在于: 【計數變量本身可以用來參與計算】這個在數組循環中尤其重要。
[Step c] 為缺省參數,正常默認設置為 Step 1 即按步長=1進行正向遞增循環。
如 For i = 1 To 100
相當于 For i = 1 To 100 Step 1
即從1 循環直到 100為止,共計循環 100-1+1=100次。
而c可以設置為任意正負數(不可設置=0……將陷入死循環。)
注意,如果設置c為負數,即進行逆向負循環時,則要求 a >= b 否則如果a < b則無法啟動循環。
例:把>=90分的人打上勾。
Private Sub CommandButton1_Click()
Dim rs%
rs = 1
Do
rs = rs + 1
If rs > 10 Then
Exit Sub
Else
If Cells(rs, 2) >= 90 Then Cells(rs, 3) = "√"
End If
Loop
End Sub
缺點:不能清理。如把51分改為510分,打勾后再改回到51分,再點篩選鍵,不能清除這個51分的勾。
Range("B7:AG26").Select
Selection.ClearContents
Range("D28:AG29").Select
Selection.ClearContents
指定塊清除
從右取字符串截取的笨辦法
| 從左第n個字符:=MID(A1,n,1) 從右第n個字符:=LEFT(RIGHT(A1,n)) |
=LEFT(RIGHT(A2,2),1) '從A2行第2列開始,右邊數第二個漢字或字母/數字長度為1個字。
如果(A2,2)的內容是“張平之子”,右數第二個字為之,長度為1,結果是“子”。長度為2結果是“之子”
"在不清楚總字符的前提下,只說從右邊第幾個字符開始提取N個字符,這就不好直接用MID函數指定位置,可以變通用:
(假設對單元格A1從右邊第M個字符開始提取N個字符)
=MID(A1,LEN(A1)-(M+N-2),N)"
Private Sub CommandButton1_Click()
Dim rs As Integer
rs = 2
Do While Cells(rs, 1) <> "" '當單元格不等于空時,則循環
If Cells(rs, 1) <> "" Then Cells(rs, 3) = Mid(Cells(rs, 1), 2, 1) '如果第1列長度為4,在該行第3列中取,從第2字取長度為1字符。
rs = rs + 1
Loop '循環
End Sub
一直循環到沒有內容為止
Private Sub CommandButton1_Click()
Dim rs As Integer
rs = 2
Do Until Cells(rs, 2) = "" '直到單元格為空為止,才結束
If Cells(rs, 2) >= 90 Then Cells(rs, 3) = "√"
rs = rs + 1
Loop '循環
End Sub
'實例-隔行填色
Sub 隔行填色()
Dim rs As Integer
rs = 2
Do Until Sheet2.Range("a" & rs) = ""
Sheet2.Range("a" & rs & ":g" & rs).Interior.ColorIndex = 7
rs = rs + 2
Loop
End Sub
輸入密碼驗證,3次不正確退出,正確為123
Private Sub CommandButton1_Click()
Dim pss$, i!
Do
i = i + 1
If i > 3 Then Exit Do
pss = InputBox("請輸入密碼")
Loop While pss <> "123"
End Sub
'FOR...NEXT也是循環語句,與之前的DO...LOOP不同之處在于,for next有一個內置計數器
Sub for next循環2()
Dim i!, j!
For i = 100 To 1 Step -2
j = j + i
Next
MsgBox j
End Sub
Sub fornext循環()
Dim rng!
For rng = 2 To 16
Sheet1.Cells(rng, 4) = Sheet1.Cells(rng, 2) * Sheet1.Cells(rng, 3)
Next
End Sub
有表格,字段為商品,單價,數量,自動填寫總金額公式
Private Sub CommandButton1_Click()
Dim rng!
For rng = 2 To 16 '第2到16行,第一行為標題,共有16行
Sheet1.Cells(rng, 4) = Sheet1.Cells(rng, 2) * Sheet1.Cells(rng, 3) '在第4列寫出第2列和第3行相乘的結果
Next '從第2行開始,順序朝下,直到第16行為止
End Sub
Sub 九九乘法表制作()
Dim a!, b!
For a = 1 To 9
For b = 1 To 9
If b > a Then
Sheet2.Cells(a, b) = ""
Else
Sheet2.Cells(a, b) = a & "×" & b & "=" & a * b
End If
Next
Next
End Sub
'exit是退出當前語句
'1.Exit Do
'2.Exit For
'3.Exit Function
'4.Exit Sub
Sub exitfor退出()
Dim i!
For i = 2 To 7
If Sheet1.Cells(i, 1) = "田七" Then
Exit For
End If
Next i
MsgBox "第一個(田七)的位置在" & i & "行"
End Sub
'end結束一個過程或塊。
'End
'End Function
'End If
'End Select
'End Sub
Sub aa()
i = 1
End
Exit Sub
j = 1
End Sub
Sub onerrorresume()
Dim i!
On Error Resume Next '當錯誤的時候繼續執行下去
For i = 2 To 8
Cells(i, 4) = Cells(i, 3) + Cells(i, 2)
Next i
End Sub
'On Error GoTo當錯誤的時候去哪兒?
Sub onerrorgoto()
On Error GoTo 100
For i = 2 To 8
k = Sheet1.Cells(i, 2) + Sheet1.Cells(i, 3)
Next i
100:
MsgBox "對不起,錯誤發生在第" & i & "行"
End Sub
循環對每行進行分割填寫
Private Sub CommandButton1_Click()
Dim i%, j% '定義循環參數
Dim br '定義系列
i = 6 '從第6行開始
Do While Cells(i, 3) <> "" '非空執行:從第6行第3列開始
br = Split(Cells(i, 3), " ") '從第6行第3行開始,把單元格內容進行拆分
If IsArray(br) Then Cells(i, 4).Resize(, UBound(br) + 1) = br '如果能分成數組,則從第6行4列開始,摟數組+1進行調整得出新數組值
i = i + 1
Loop
End Sub
array("A","B","C","D","E")
UBound(array)返回的是4,因為默認下標是從0開始的。相當于A(0 to 4)。
UBound語法如下:
返回一個 Long 型數據,其值為指定的數組維可用的最大下標。
UBound(arrayname[, dimension])
arrayname
必需的。
數組變量的名稱,遵循標準變量命名約定。
dimension
可選的;Variant (Long)。指定返回哪一維的上界。1 表示第一維,2
表示第二維,如此等等。如果省略 dimension,就認為是 1。
對具有下述維數的數組而言,UBound 的返回值見下表:
Dim A(1 To 100, 0 To 3, -3 To 4)
UBound(A, 1) = 100
UBound(A, 2) = 3
UBound(A, 3) = 4
如果沒指明下標,下標默認為0。定義一年365天的開支參數,用數組表示如下:
Dim curExpense(364) As Currency
0占一個元素位置+364個元素。
UBound的是數組的上界。
比如一組數組arr(1 to 10),那么ubound(arr)=10
二維數組arr(1 to 10,1 to 100),
ubound(arr,1)=10
表示第一維的上界是10
ubound(arr,2)=100表示第二維的上界是100
數組測試
Private Sub Constant_demo_Click()
Dim a,b as Variant
a = array("Red","Blue","Yellow")
b = "12345"
msgbox("數組類型測試結果組 1 : " & IsArray(a))
msgbox("數組類型測試結果組 2 : " & IsArray(b))
End Sub
當執行上面的函數時,它會產生下面的輸出。
數組類型測試結果組 1 : True
數組類型測試結果組 2 : False
總結
以上是生活随笔為你收集整理的VBA基础六:遍历、循环的实例DO....WHILE/UNTILL/LOOP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android驱动笔记(13)——PMI
- 下一篇: NodeJS使用volta进行版本管理