目录
一、if
二、select case
三、for
四、do while
五、do until
六、go to
最常用的就是if、select case、for、do while四个
程序流程控制—>if语句
====================
1、if—then语句
这个句式相当于中文里面的“如果.......那么”。
格式:
if 逻辑表达式 then
语句块
end if
解释:如果逻辑表达式的结果为true,则执行语句块里的所有语句,否则执行end if后面的语句。语句块可以是一句指令或多条指令,也可以调用一个或多个过程,当然,也可以为空,就是没有语句。
如:要判断A1单元格是否已输入内容,设计程序:
Sub test1()
If [a1] = "" Then
MsgBox "A1单元格没有输入任何内容!"
End If
End Sub
2、 if—then—else语句
这个语句相当于中文里面的“如果......那么......否则......”句式。
格式:
if 逻辑表达式 then
语句块1
else
语句块2
end if
解释:如果逻辑表达式的结果为true,则执行语句块1里的所有语句,如果逻辑表达式的结果为Flase则执行语句块2里的所有语句。
如:要判断A1单元格是否已输入内容,设计程序:
Sub test2()
If [a1] = "" Then
MsgBox "A1单元格没有输入任何内容!"
Else
MsgBox "A1单元格已经输入了内容!"
End If
End Sub
3、if—then—elseif语句
这就相当于中文里面的若“如果…那么…否则如果…那么…否则”语句,当然,可以有多句“否则如果.......”
格式:
If 逻辑表达式1 Then
语句块1
ElseIf 逻辑表达式2 Then
语句块2
ElseIf 逻辑表达式3Then
语句块3
…
Else
语句块n
Eed If
解释:若逻辑表达式1的结果为True,则执行语句块1,接着继续执行EndIf后面的语句;若逻辑表达式1的结果为False,则检查逻辑表达式2的结果,若为True则执行语句块2,接着继续执行EndIf后面的语句.......一直到所有结果的条件都不满足时,才执行Else后面的语句块n。
如:要判断A1单元格的数是否能被2、3、5其中之一整除,设计程序:
Sub test3()
If [a1] = "" Then
MsgBox "A1单元格没有输入任何内容!"
ElseIf [a1] Mod 2 = 0 Then
MsgBox "A1单元格的数能被2整除!"
ElseIf [a1] Mod 3 = 0 Then
MsgBox "A1单元格的数能被3整除!"
ElseIf [a1] Mod 5 = 0 Then
MsgBox "A1单元格的数能被5整除!"
Else
MsgBox "A1单元格的数不能被2、3、5其中之一整除!"
End If
End Sub
程序流程控制——Select Case语句
=============================
Select Case语句同IF语句一样,也是条件判断的语句。它的功能也可以用IF语句来完成。但是,当程序的条件太多,用IF语句来判断的话就存在一些不足了,比如程序是否美观?是否便于阅读?程序的执行效率等等。Select Case语句在执行的效率上,同IF语句相比,肯定是要快得多。
[Select Case语句的语法]
Select Case 测试表达式
Case 条件表达式1
语句块1
Case 条件表达式2
语句块2
Case 条件表达式3
语句块3
......
Case 条件表达式n
语句块n
Case Else
语句块Else
End Select.
当某个条件表达式与测试表达式相匹配时,则执行其后的语句块,否则执行Case Else后的语句块,然后结束Select Case块的执行。同IF语句一样,可以不要Case Else语句。
“如对A1单元格的学生成绩进行等级评定,小于等于30分的为差,30分到59分的为不及格,60分到79分的为及格,80分到89分的为良好,90到100分的为优秀。”用Select Case语句来解决就是:
Sub test()
If [a1].Value = "" Then
MsgBox "A1单元格没有输入数字。"
Exit Sub ' 退出程序
End If
Select Case [a1].Value
Case 0 To 29
MsgBox "差"
Case 30 To 59
MsgBox "不及格"
Case 60 To 79
MsgBox "及格"
Case 80 To 89
MsgBox "良好"
Case Else
MsgBox "优秀"
End Select
End Sub
程序流程控制——For—Next 循环语句
=============================
什么是循环?
这里我们指的循环是指重复地执行某项动作(语句块)。
同学们在操场上跑步,两万米长跑,每圈400米。“呯”,枪一响,开始跑,一圈,两圈,三圈......直到跑满50圈才停止。这里,同学们就是在循环地在操场的跑道上执行跑步的动作。
我们来看一下For—next 的句式:
For 循环变量=初值 to 终值 step 步长
循环体1
[exit for]
循环体2
next 循环变量
解释:从开始到结束,反复执行For和Next之间的指令块,除非遇到Exit For语句,将提前跳出循环。其中,步长和Exit For语句以及Next后的循环变量均可省略,步长省略的时候默认为1。Exit for 语句是强制终止循环的语句,执行它后将退出循环,执行next后面的语句。
循环变量是一个变量,可以在循环体中对其进行修改,但一般就避免在循环体中对其修改。
对句式进行了初步的认识后,我们用这个句式来叙述上面学生跑步的问题。把它编成程序,20000米,要跑50圈,也就是要50次,同学们要在上面一圈,两圈。。。。直到满50圈才停止循环跑步,当然,如果你要提前退赛,就不用跑满50圈了。有了这个思想,程序可以写成:
Sub 循环跑步()
dim 圈数 as byte
for 圈数=1 to 50 step 1
If 学生.要求=退赛
exit for
End If
Next 圈数
End Sub
当然,这只是一个实例,帮助你对For—next语句的理解,下面我们来用一个实例来讲解For-next语句!
问题:求1到1000的自然数的和。程序编为:
Sub mysum()
Dim Lsum As Long, i As Long
For i = 1 To 1000
Lsum = Lsum + i
Next
MsgBox "1到1000的自然数和为:" & Lsum
End Sub
程序流程控制——For—Each 循环语句
===============================
有了前面对循环一词的理解,这里我们不用再多说,如果你知道了For—next语句的工作原理,这里再来学习For—each循环以及下面我们接着要讲的句式,那就相当简单了,同样的工作原理。
学会了吃苹果,那么离会吃梨的道路还会远吗?
呵呵,只是开个小小的玩笑,下面我们继续,首先来看看For—Each语句的句式:
For Each 元素变量 In 对象集合或数组名称
语句块1
[Exit For]
语句块2
next 元素变量
和上面For—next句式是一样的工作原理。
这里的“元素变量”是用来遍历集合或数中中元素的变量,它从集合或数组的第一个元素开始,直到最后一个元素,然后退出循环。
这里我们举个例子,把当前工作薄中工作表的名称写在A列,程序为:
Sub shtname()
Dim i As Integer, sht As Worksheet
i = 1
For Each sht In Worksheets
Cells(i, 1) = sht.Name
i = i + 1 '让写入名称的单元格下移一行
Next
End Sub
程序流程控制——Do While语句
===========================
Do While也是循环语句,它分为两种情况,一种是把循环条件放在开头,一种是把循环条件放在结尾。
1、开头判断循环条件
语句格式:
Do While 循环条件
语句块1
[Exit Do]
语句块2
Loop
首先判断循环条件,条件为真则执行Do到Loop之间的语句。
2、结尾判断循环条件
语句格式:
Do
语句块1
[Exit Do]
语句块2
Loop While 循环条件
先执行一次Do到Loop之间的语句,再判断循环条件,满足条件则进行循环。
两种格式的区别:因为第二种格式是把循环体放在尾部,得先执行一遍语句再进行循环条件判断,所以,同样的条件,第二种格式的循环会比第一种多执行一次循环部份的语句。
我们用Do While语句来解决求1——1000的自然数的和的问题:
Sub mysum()
Dim Lsum As Long, i As Long
i = 1
Do While i <= 1000
Lsum = Lsum + i
i = i + 1
Loop
MsgBox "1到1000的自然数和为:" & Lsum
End Sub
程序流程控制——Do Until 语句
这个和Do While语句类似,它也有两种形式,学了Do While语句,再看这个,就可以无师自通了。下面就简单介绍下:
1、开头判断循环条件
语句格式:
Do Until 循环条件
语句块1
[Exit Do]
语句块2
Loop
2、结尾判断循环条件
语句格式:
Do
语句块1
[Exit Do]
语句块2
Loop Until 循环条件
执行Do 和Loop之间的指令,直到循环条件为真时退出循环。
直到循环条件为真时退出循环,这是Do Until 与 Do While的区别。而它两种语句格式的区别,也是第二种比第一种多执行一次循环部分的语句。
还是求1——1000自然数的问题,这次我们换用Do Untile语句:
Sub mysum()
Dim Lsum As Long, i As Long
i = 1
Do
Lsum = Lsum + i
i = i + 1
Loop Until i > 1000
MsgBox "1到1000的自然数和为:" & Lsum
End Sub
程序流程控制——Go to 语句
===========================
Go to 在英语里是什么?相信大家的英语都比我好得太多,不用多说。其实Go to 语句的作用用定两个英语单词就说明问题了,“Go to 地点”就是去到哪儿的意思。
Go to 语句是将程序转到指定的标签的语句位置,然后继续往下执行。Go to 语句通常用来作错误处理。
同样的,还是用Go to 语句来做1——1000自然数的和:
Sub mysum()
Dim Lsum As Long, i As Long
i = 1
x: '为go to 语句设置的标签,必须以英文状态下的冒号结尾
Lsum = Lsum + i
i = i + 1
If i <= 1000 Then GoTo x '如果i<=1000,则程序跳到标签X处
MsgBox "1到1000的自然数和为:" & Lsum
End Sub