Excel VBA学习笔记(六):VBA中的循环语句

介绍四种循环语句的语法:

一、For 循环语法: For 变量=数值 to 数值 Step 步值

“需要执行的语句"

Next 变量

Next 后面的”变量名“,经常被省略。Step 步值 ,省略不写的情况下,变量每次循环后,数值增加1;写上Step 2,那么每次循环 变量+2。步值也可以为负数,如Step -1 ,变量在赋值时,先赋值大数值,往小方向变化。

For i = 10 To 2 Step -1     '倒序循环
  Set Rng = Cells(i, n)           ' i 为行号,从下往上,i 值不断减小
  If Rng = Rng.Offset(-1) Then   '当前单元格与其上单元格相同就合并单元格
    Rng.Offset(-1).Resize(2).Merge
  End If
Next 

二、For Each 循环:For Each 变量 IN 对象集合

“需要执行的语句"

Next 变量

"IN 对象集合",因为是在“对象集合”中循环,这里的变量不同上面的FOR循环语句,上面的FOR循环语句中的变量代替数值;这里的变量可能是某个值,也可能是对象(通常的对象类型:单元格、工作表)。

示例1、 变量代表数组中的某个值

For Each pa In Array("[一-龢]{2,4}(?=支)", "[一-龢]{2,4}(?=办)")
        .Pattern = pa
    For i = 1 To UBound(arr)
    If .test(arr(i, 1)) Then
      arr(i, 1) = .Execute(arr(i, 1))(0)
    End If
    Next i
Next pa

此示例中的变量"pa" 不能声明为As String,会报错。就不要用DIM声明。

ExcelVBA学习笔记(六):VBA中的循环语句

示例2、变量为单元格

dim rng as Range     '声明为单元格
// 依据 f2:f23 单元格的内容生成多个工作表,名称就是f2:f23 单元格的内容
  For Each rng In [f2:f23]    'rng 单元格对象
    Worksheets.Add after:=Sheets(1)  '增加一张工作表,放在第1张工作表之后
    Sheets(2).Name = rng
  Next rng       '可只写 Next

For 或 For Each 都是限定范围的循环语句,Do ... Loop 循环属于无限定范围的循环语句(无限循环)。为了使循环有意义,需加条件让循环退出,于是就有

三、Do While 条件表达式(表达式的值要为逻辑值,为TRUE才执行循环)

“需要执行的语句"

LOOP

注意,循环体里的语句,必定会对条件产生影响,导致条件能不成立,不然就成死循环了。

四、 Do

“需要执行的语句"

LOOP Until 条件(表达式的值要为逻辑值,为TRUE就会退出循环)

同样要注意避免产生死循环。

While 与 Until 都可写在 DO 的后面或是 Loop 后面,功效是一样的。只是通常写法:While写在Do后,Until 写在 Loop后。