站内搜索:

运行结构(顺序结构、判断结构if...then...else、循环结构for(each...in)to...next/do while...loop(while))

浏览人数:
大部分编程语言都具备基本的三种程序运行结构,分别是
顺序结构、判断结构、循环结构。
各种简单到复
杂的算法,都是由这三种基本的结构,相互组合而完成。

顺序结构:

我们以下面的Excel表为例,在B2单元格录入成绩:45,B3单元格录入成绩99等等。


sub 录入成绩的过程代码如下:

Sub 录入()
Range("b2") = 45
Range("b3") = 99
End Sub
 
同理如果要输入其他单元格的成绩,对应的代码如下:
Sub 录入()
Range("b2") = 45
Range("b3") = 99
Range("b4") = 50
Range("b5") = 63
Range("b6") = 78
Range("b7") = 71
Range("b8") = 91
Range("b9") = 69
Range("b10") = 47
End Sub

所谓的VBA顺序结构,就是从上到下,从左到右的顺序进行代码的运行。

判断结构

如果现在需要对成绩进行判断,比如要对B2单元格的成绩进行及格的判断,大于等于60时,显示及格,否则显示不及格。

Sub 判断结构()
If Range("b2") >= 60 Then
Range("c2") = "及格"
Else
Range("c2") = "不及格"
End If
End Sub
 

上面的第1个条件真是,执行Then后面的语句,如果不为真是,执行else语句if和end if是成对出现

这个例子是2个条件,如果是大于2个判断,应该如何写代码呢?

比如B3单元格的成绩,我们要求大于80分时,显示优秀,大于等于60时,显示及格,其他的显示不及格

这就变成了3种状态,就需要配合elseif使用。

Sub 判断结构2()
If Range("b3") >= 80 Then
Range("c3") = "优秀"
ElseIf Range("b3") >= 60 Then
Range("c3") = "及格"
Else
Range("c3") = "不及格"
End If
end sub
 

总结:
if和end if成对出现,第1个条件执行if。。。then后的内容,第二个条件执行else。。。then后的内容,最后一个条件执行else后面的内容
对于Then这个词感觉就是一个鸡肋,不明白为什么非要加一个then。

循环结构。

VBA 中循环结构有 3 种类型,它们是:

1):for……to……循环


For [变量] = [初始值] To [结束值] Step [步长]
'这里是循环执行的语句
Next
 
实例1:以一个小循环为例,i指定类型为整数,从1至10,每次增加1.实现1至10的累加。
 

Sub MyCode()
Dim i As Integer
Dim sum As Integer
For i = 1 To 10 Step 1
sum = sum + i
Next
End Sub
 

实例2:那我们以最开始的成绩为例,要对B列的所有成绩进行判断,填写至C列。



代码应该如何书写,先简单分析一下,第2行到第10行,第2列为判断的值,第3列为要填写的值,所以我们使用对象cells,
 

Sub 循环()
For i = 2 To 10 Step 1
If Cells(i, 2) >= 60 Then
Cells(i, 3) = "及格"
Else
Cells(i, 3) = "不及格"
End If
Next
End Sub
 

2):for each……in……循环


For Each [元素] In [元素集合]
'循环执行的代码
Next [元素]
 

in后面的部分为集合,或者是一个对象。这是重点,如果需要申明变量时,只需要申明元素的就可以了。

下面来看一段实例代码,比如水果是一组数据,然后遍历打印在窗口中显示出来。(数组就是一个集合)
 

Private Sub Constant_demo_Click()
   'fruits is an array
   fruits = Array("苹果", "橙子", "樱桃")
   'Dim fruitnames As Variant

   'iterating using For each loop.
   For Each a In fruits
      fruitnames = fruitnames & a & Chr(10)
   Next

   MsgBox fruitnames
End Sub
 

同样的,如果要使用上面的例子,要求使用for each循环,代码如下:
 

Sub 循环2123()
bc = Array(2, 3, 4, 5, 6, 7, 8, 9, 10)
   For Each abb In bc
      If Cells(abb, 2) >= 60 Then
      Cells(abb, 3) = "及格"
      Else
      Cells(abb, 3) = "不及格"
      End If
   Next
End Sub
 

先把一个序列定义为一个数组,再进行循环就可以了

单元格区域作为一个集合,也可以使用for each来进行遍历显示。


上图中,一个是使用的单元格区域作为了区域对象,被注释掉的为指定的a1:a10为区域对象,区域集合。

下图中,是把活动工作表中所有的图形对象作为一个集合。配合for each使用了遍历显示,遍历调整

总结:
使用for each,集合可以是自己设定的,比如某个数组,也可以是工作表,工作簿,工作表中的对象是一个集合(所有的图片,所有的使用区域)等

Exit For 语句用于跳出循环过程,一般在提前结束循环时使用,均适用于 For Next 循环和 For Each 循环。
 

Do While … Loop 循环

Do While … Loop 循环,根据 While 关键词后的条件表达式的值,真时执行,假时停止执行。基本语法如下:
 

Do While [条件表达式]
'循环执行的代码
Loop
 

其中,只要 [条件表达式] 为真,将一直循环执行。[条件表达式] 一旦为假,则停止循环,程序执行 Loop 关键词后的代码。
 

Do … Loop While 循环

与上一种 Do 循环不同的是,Do ... Loop While循环至少循环执行代码一次后,再判断条件表达式的值。基本语法如下:


Do
'循环执行的代码
Loop While [条件表达式]
 

Exit Do 语句用于跳出 Do While 循环

Do Until 循环

Do Until 循环与 Do While 循环类似。不同点在于,Do While 在条件表达式为真时,继续执行循环;而 Do Until 在条件表达式为真时,停止执行循环。

 

Do Until … Loop 循环

循环开始前判断 Until 后条件表达式的值,如果是真,停止循环;如果是假,继续执行循环。基本语法如下:


Do Until[条件表达式]
'循环执行的代码
Loop
 

Do … Loop Until 循环

先运行一次,再判断 Until 后条件表达式的值,如果是真,停止循环;如果是假,继续执行循环。基本语法如下:


Do
'循环执行的代码
Loop Until [条件表达式]
 

制作表格zhizuobiaoge.com
Copyright@all rights reserved