Vba for 循环(对于下一个,对于每个)
关键点
- VBA For 循环是固定循环类型。
- 录制宏时不可能使用这些循环之一。
对于下一个循环
VBA FOR NEXT 是一个使用计数器执行迭代的固定循环。简单来说,您需要指定要运行循环的次数,一旦达到该循环次数,它将自动停止。这就是为什么它是固定循环并且在 VBA 开发人员中最受欢迎的原因。
句法
以下是 VBA For Next 循环的语法:
For counter = Start To End [Step stepsize] [statements] Next [counter]
- Counter :它是一个变量,存储重复次数并随着每次重复而增加其值。例如,如果循环正在进行第五次迭代,则计数器值将为 5,并且一旦循环执行第五次迭代的指令,计数器值将更改为 6。
- Start :它是一个数字变量,存储计数器的起始值。
- End :它是一个数字变量,存储计数器的最终值。
- 步长:此变量指定计数器值的大幅增加或减少。默认情况下,步长为 1,但您也可以使用任何正值或负值。
- 语句:这是您希望在 For Next 循环的每次迭代中运行的一组代码。
- Next :这是循环迭代的结束语句,并使用计数器值告诉 VBA 重复循环,一旦计数器达到结束值,就会结束循环。
理解下一个循环的示例
为了了解如何在下一个循环中使用它,让我们编写一个简单的代码来在列中添加序列号。
让我详细说明一下:我们需要编写一段代码,可以从选定的单元格逐一转到接下来的 10 个单元格,并仅在下面的快照中添加序列号。
要使用For Next Loop,您可以按照以下步骤操作:
- 首先,您需要声明一个可用于存储计数器值的变量。
- 接下来,我们需要将计数器值分配给变量。
- 现在是时候为循环编写代码了,因此在第一行中您需要使用计数器变量并设置开始值和结束值。在此代码中,您将变量“i”作为结束值。
- 从那里,您需要编写代码,将序列号添加到活动单元格中,然后转到下一个单元格。随着计数器值随着每次迭代而增加,您可以使用它在活动单元格中输入序列号,然后您可以使用 Shift 将选择向下移动到下一个单元格。
- 最后,使用next关键字和计数器变量来完成循环代码。
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
您可以在下面的快照中看到,当我运行此代码时,它通过输入序列号从选定的单元格开始,然后在每次迭代中移动到下一个单元格。
如您所知,For Next 是一个固定循环,在这段代码中,当您分配一个数值时,它会告诉 VBA 运行循环该次数。
您可以看到下面我在循环的第二次迭代中拍摄的快照,其中计数器变量“i”的值为 2。
我想要说明的一点是,计数变量每次迭代都会更改其值,并将该值输入到活动单元格中,然后移动激活下一个单元格,从而完成迭代。
最后,“Next”关键字是VBA返回到循环的第一行并重复它。正如您在 For Next 语法中看到的那样,您还可以在循环中使用步长值来基于该值操作计数器。
因此,如果您使用 2 作为步长值,代码将如下所示。
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i Step 2 ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
当您运行此代码时,活动上将会出现类似下面的快照的内容。
当您使用步长值(如上面代码中使用的步骤 2)时,VBA 会忽略循环中的每第二次迭代,并且如您所见,您有五个数字,每个数字相差一。
注意:在上面的示例中,您使用了“i”作为计数器变量,但您也可以根据需要使用不同的名称。
对于每个后续循环
VBA FOR EACH NEXT 是一个固定循环,可以循环遍历集合中的所有对象。在 For Each Next 中,您不需要指定迭代次数。相反,您可以指定对象的集合,并且它将能够逐个迭代所有这些对象。
例如:如果您想浏览某个范围内的所有单元格。在这种情况下,范围是集合,单元格是您拥有的对象。
句法
以下是每个后续循环的 VBA 语法:
For Each Object In Collection [statements] Next [object]
- Object :它代表您正在循环的对象集合中的唯一对象。在每次迭代中,从一个对象转到另一个对象。
- Collection :这是您要循环的对象的集合。
- 语句:您希望在集合中所有对象的每个循环中运行的代码行。
- Next :这是循环迭代的结束语句,告诉 VBA 移至集合中的下一个对象。
了解 For Each Next 循环的示例
为了理解 For Each Next 循环,让我们编写代码来隐藏除活动工作表之外的所有工作表。此代码将检查每个工作表的名称,并将其与活动工作表的名称进行匹配,如果不匹配则将其隐藏。
要使用 For Each Next 循环,您可以按照以下步骤操作:
- 首先,您需要声明一个变量以用作工作表。
- 之后,使用关键字“For Each”,然后使用工作表的变量“mySheet”,并使用“ActiveWorkbook.Worksheets”作为活动工作簿的工作表集合。
- 接下来,您需要使用 VBA IF 语句来测试当前在此循环迭代中的工作表的名称是否不等于活动工作表,如果此条件为真,则隐藏当前在循环中的工作表迭代。
- 最后,您有 NEXT 关键字和“mySheet”变量来完成循环代码。
最终代码:
Sub Hide_Other_Sheets() Dim mySheet As Worksheet For Each mySheet In ActiveWorkbook.Worksheets If mySheet.Name <> ActiveSheet.Name Then mySheet.Visible = False End If Next mySheet End Sub
当您运行此代码时,它会遍历活动工作簿中的每个工作表并将其名称与活动工作表进行匹配,如果工作表的名称与活动工作表的名称不匹配,则会进行匹配。面具。
这样所有的工作表都将被隐藏。