VBA基础六:遍历、循环的实例DO....WHILEUNTILLLOOP
Loop 语句是条件为True时循环
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
'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
resize函数vbaNext 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
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论