Excel VBA 之For Next循环

news/2024/11/28 23:43:27/

.简单for循环

当你知道你需要重复运行多少次某段语句时,可以使用For…Next语句。它的语法如下:

For 计数器 = 开始 To 结束 [step  步长]语句1语句2[Exit For]语句N
Next [计数器]

 

从开始到结束,反复执行For和Next之间的指令块,除非遇到Exit For语句,将提前跳出循环。其中,步长和Exit For语句以及Next后的计数器均为可选项。

计数器是个储存反复次数的数字型变量,开始是你期望的起始计数点,结束则表明循环应该执行多少次,步长是计数器每次的变化量(可正可负)。

 当程序遇到关键字Next时,它将回到循环的开始处,并且再次执行循环里面的代码,直到计数器到达结束值。一旦计数器的值大于关键字To后面的数值,程序就会跳出循环。因为计数器变量在每次执行循环后会自动地变化,它早晚会超出结束的值。每次程序执行循环里的语句后,变量计数器的值会默认地增加1,你可以使用Step语句来改变这个默认设置。例如,要使计数器每次增加3,就可以使用以下语句:

For counter = 1 To 5 Step 3

验证:将单元格(1,1)、(4,4)分别赋值为1和4

Sub test()For i = 1 To 5 Step 3Cells(i, i) = iNext i
End Sub

程序将需要执行循环里面的指令2次。嵌套在循环里面的赋值语句(If…Then…Else)告诉程序给单元格(1,1)、(4,4)分别赋值为1和4

程序每完成一次循环,它就跳到关键字For来比较i的值和5的值。

二.多重for循环

一般情况下,我们只使用到一个For语句,如果你使用多个For语句,那么就是For语句的嵌套或多重使用了。

1、简单的三重for语句为:

Sub test()Dim mDim nDim km = 1n = 1k = 1For m = 1 To 6For n = 1 To 6For k = 1 To 6Next kNext nNext m
End Sub

下面,我们来学习如何在多重循环中退出循环跳转至某个循环:要想学习多重循环中如何退出某个循环,我们可以跟踪并输出某个变量的值,就可以追踪到循环运行到哪个位置并退出循环了。

2、退出第三个循环

Sub test()Dim mDim nDim km = 1n = 1k = 1For m = 1 To 6 '第一个循环For n = 1 To 6 '第二个循环For k = 1 To 6 '第三个循环If (k = 3) ThenExit ForEnd IfNext kNext nNext mMsgBox ("现在的m值为:" & m & "  现在的n值为:" & n & "  现在的k值为:" & k)
End Sub

此时的m为7、n为7,而k则为3,说明,第一第二个循环完全运行,而第三个循环每次都只运行到k等于3就退出第三个循环了,第三个循环没有完全运行。

3、退出第二个循环

Sub test()Dim mDim nDim km = 1n = 1k = 1For m = 1 To 6 '第一个循环For n = 1 To 6 '第二个循环If (n = 3) ThenExit ForFor k = 1 To 6 '第三个循环Next kEnd IfNext nNext mMsgBox ("现在的m值为:" & m & "  现在的n值为:" & n & "  现在的k值为:" & k)
End Sub

这个时候,m的值为7,n的值为3,而k的值为1,在这个循环过程中,第一个循环完全执行,第二个循环只执行到n=3就不再运行,而第三个循环一直都不执行。

4、退出第一个循环

Sub test()Dim mDim nDim km = 1n = 1k = 1For m = 1 To 6 '第一个循环If (m = 3) ThenExit ForFor n = 1 To 6 '第二个循环For k = 1 To 6 '第三个循环Next kNext nEnd IfNext mMsgBox ("现在的m值为:" & m & "  现在的n值为:" & n & "  现在的k值为:" & k)
End Sub

这个时候,m的值为3,n的值为1,而k的值为1,在这个循环过程中,第一个循环只执行到m=3就不再执行了,而第二第三个循环,一直都没有执行。

综上所述,上面的例子分别给大家列举了三重for循环,如何退出其中的某个循环,在此过程中,仅使用简单的Exit For语句就可以实现了,但是,难点在于,Exit For所放的位置,要配合if语句来使用,这样才起到效果,否则会导致循环嵌套的混乱。


http://www.ppmy.cn/news/41741.html

相关文章

【Docker】Dockerfile简介

介绍 Dockerfile是用来构建Docker镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。 我们使用docker commit可以构造镜像,但是docker中的镜像随时变化,不能一次次的使用commit,因此使用Dockerfile来一次性构建。 …

0302TodoList案例-react应用

文章目录1 效果2 功能拆分和静态组件3 动态初始化4 功能实现4.1 添加todo4.2 鼠标移入效果和删除todo4.3 todo选中和取消选中4.4 底部统计和删除已完成5 TodoList案例总结结语1 效果 通过前面学习React基础和create-react-app脚手架,下面我们做一个经典的入门案例T…

记一次IDEA(linux版) cpu占用太高的处理过程

早上打开电脑->打开idea,cpu飙到97%,加载完索引,加载完所有项之后,吾发现idea cpu占用并没有释放. 重启idea问题依旧,重启电脑问题依旧,吾甚是难以理解。 于是打开如下(汉化后的idea): 发现…

Spring开启事务流程和事务相关配置

文章目录Spring事务Spring快速入门事务相关配置Spring事务 Spring快速入门 事务作用:在数据层保障一系列的数据库操作同成功同失败 Spring事务作用:在数据层或业务层保障一系列的数据库操作同成功同失败 Spring提供了一个接口PlatformTransactionMana…

零基础学习Java 08

目录 继承 super关键字 继承中构造方法的关系 继承使用场景 继承的设计技巧 多态 多态中的成员访问特点 继承 继承:多个类中存在相同属性(成员变量)和行为(成员方法)时,将这些内容抽取到单独一个类中…

CS5463 DP转HDMI8K30Hz转换芯片规格书|CS5466 typec转HDMI8K30Hz (4K144Hz)转换芯片规格书

1.CS5463/CS5266概述 CS5463/CS5466是一款高性能的Type-C/DisplayPort1.4到HDMI2.1协议转换器,通过Type-C/D DisplayPort链路接收视频和流,并转换为支持TMDS或FRL输出信令的HDM。DP接收器在2个通道上支持高达8.1 Gbps的链路速率。HDMI输出端口可以作为T…

类的相关知识(一)

目录 OOP(面向对象编程) 区别 面向过程 面向对象 类 成员函数 类的作用域 类的大小 this指针 OOP(面向对象编程) 本质上是一种编程思想,通过把我们编程中遇到的事物抽象成对象来编程 区别 面向过程 struc…

SQL Day01

1.关系型数据库的特点 理论基础:关系代数(集合论、一阶逻辑、关系运算) 具体表象:用二维表装数据 ​ - 表 - table / entity - relation ​ - 列 - column / field - attribute ​ - 行 - row / record - tuple ​ - 列的数量 - …