我要投稿 | RSS
您当前的位置:首页 > ExcelVBA

运行结构(顺序结构、判断结构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 种类型,它们是:

  • For 循环(For … Next 循环【数值循环】、For Each 循环【文本循环】)
  • Do While 循环(Do While … Loop 循环【先判断,成立后循环】、Do … Loop While 循环【先执行一次后再进行判断成功后再循环】)
  • Do Until 循环(Do Until … Loop 循环、Do … Loop Until 循环)

For [变量] = [初始值] To [结束值] Step [步长]
'这里是循环执行的语句
Next
 
  • [变量] 是一个数字类型变量,可在循环执行的语句里使用。
  • [初始值] 和 [结束值] 是给定的值;
  • [步长] 是每次循环时,变量的增量。如果为正值,变量增大;如果为负值,变量减小。
以一个小循环为例,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
 

那我们以最开始的成绩为例,要对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
 


 

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

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

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
 

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

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 [条件表达式]
 
来顶一下
返回首页
返回首页
推荐资讯
{SUM函数}:计算单元格区域中所有数值的和
{SUM函数}:计算单元
LEFT函数:从一个文本字符串的第一个字符开始返回指定个数的字符
LEFT函数:从一个文本
MID函数:从文本字符串中指定的起始位置起返回指定长度的字符
MID函数:从文本字符
column函数:返回一引用的列号
column函数:返回一引
扫一扫微信二维码,联系作者:
相关文章
    无相关信息
栏目更新
栏目热门