Excel开发者模式学习(4)——流程控制

目录

一、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

 

 

 

上一篇:CTF-REVERSE练习之算法分析1


下一篇:一个使用windows batch 批量转化目录内文件格式的脚本。