Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 10980|回复: 24

[分享] 【烟花原创】VBA零基础之第16篇 For...Next循环

[复制链接]
发表于 2013-11-9 22:02 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2013-12-4 09:03 编辑

       在写代码的时候,经常会有这种情况,需要反复的执行一条或多条语句。
       执行一次,咱就写一次,如果执行100次,1000次,咱是不是也给复制粘贴100次,1000次了?
        今天我们要讲的For…Next语句正是为解决此问题而设计的

       For…Next语句重复执行一条或多条语句,他的循环次数是指定的
       语法:
              For 计数器变量 = 起始值 To 结束值 Step 步长
                     语句
                     Exit For
                     语句
              Next 计数器变量

       计数器变量:必要参数,用来做循环计数器的数值变量。
              For I = 1 To 5
       起始值:必要参数,可以是数值或表达式,指定计数器从哪个值开始
       结束值:必要参数,可以是数值或表达式,指定计数器结束于哪个值
       步长:可选参数,指定计数器变量每次增加的值。
       当缺少 step 步长 时,则默认为step 1。步长可以是正数,也可以是负数
       当然也可以是0(是0的话,就只有死循环一条路了)。
        正确: For I = 1 To 5
       正确: For I = 1 To 5 Step 1
       错误: For I = 5 To 1
       以上步长是正数(正增长),我们再看看步长为负数的情况(负增长)
       正确: For I = 5 To 1 Step -1
       错误: For I = 1 To 5 Step -1

       要保证循环的运行,在步长值为正数或0的的情况下,计数器变量的值必须是小于等于结束值;
       在步长值为负数的情况下,计数器变量的值是大于等于结束值的。

       当循环中的所有语句都执行后,步长的值 会加到 计数器变量中。
       此时循环中的语句可能会再次执行(基于循环开始执行时同样的测试),
       也可能是退出循环并从 Next 语句之后的语句继续执行。

         需要注意的是:在循环中改变 counter 的值,将会使程序代码的阅读和调试变得更加困难。
         Dim i As Integer
         For i = 1 To 10
                  i = i + 2
           Next
         大家可以看看上面的代码,循环语句一共执行了几次。

         Exit for:退出循环。可以在循环中进行判断,如果需要提前结束循环则可以使用此语句。
                  For I = 1 To 100
                           J = J + 100
                           If J > 1000 Then Exit For
                  Next

         NEXT 计数器变量:NEXT后面的计数器变量名是可以省略的。
         但如果不省略的话,则注意必须的FOR语名中的计数器变量名一致。
         错误的用法:
         首尾不一致
         For I = 1 To 5
                  …
         Next J

          交叉嵌套
         For I = 1 To 5
                  For J = 1 To 5
                           …
                  Next I
         Next J

         可以将一个 For...Next 循环放置在另一个 For...Next 循环中,组成嵌套循环
         不过在每个循环中的 计数器变量 要使用不同的变量名。
         For I = 1 To 10
                  For J = 1 To 10
                           For K = 1 To 10
                                     ...
                           Next K
                  Next J
         Next I

完整的例子
         Sub ListWorksheets()
                  Dim I As Integer
                  Dim strMsg As String
                  strMsg = "当前工作簿 " & ActiveWorkbook.Name & " 包含以下工作表:" & vbCr
                  'Activeworkbook.name 当前活动工作簿的文件名
                  For I = 1 To Worksheets.Count
                           strMsg = strMsg & Worksheets(I).Name & vbCr
                           'worksheets(i)当前活动工作簿中,第I个工作表
                           'name,工作表表名
                  Next
           MsgBox prompt:=strMsg, Buttons:=vbInformation + vbOKOnly, Title:="提示"
         '消息对话框,prompt是消息对话框显示的文本内容
         'buttons指定对话框中显示的按钮和图标样式,是多个值的累加
         'vbOkOnly:确定按钮
         'vbinformation:信息图标
End Sub

评分

参与人数 2 +4 收起 理由
darren_data + 1 赞一个!
759857387 + 3 很给力!

查看全部评分

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-11-9 23:38 | 显示全部楼层
回复

使用道具 举报

发表于 2013-11-10 17:01 | 显示全部楼层
【Step当然也可以是0(是0的话,就只有死循环一条路了)。】

……
呵呵,Step=0 确实没用过,因为可以用Do……Loop代替。


但说是死循环,则既正确也不全面。

例如:
Sub test()
    For i = 1 To 5 Step 0
        j = j + 1
        If j > 9 Then Exit For
    Next
    MsgBox "i = " & i & vbCr & "j = " & j
        
    Do
        k = k + 1
    Loop While k < 10
    MsgBox "k = " & k
End Sub


回复

使用道具 举报

发表于 2013-11-10 17:03 | 显示全部楼层
楼主应该接着介绍一下 For Each ……in ……

回复

使用道具 举报

发表于 2013-11-10 17:18 | 显示全部楼层
步长为正/负的情况下,不能以'正确/错误'来简单定性。特别是这样的作为入门介绍的东东,有可能引起误导
回复

使用道具 举报

发表于 2013-12-16 08:57 | 显示全部楼层
学习来的,谢谢
回复

使用道具 举报

发表于 2014-1-27 11:46 | 显示全部楼层
修炼第16集中
原来for 语句还可以为负,受教了
回复

使用道具 举报

发表于 2014-2-28 17:06 | 显示全部楼层
学习来的,谢谢
回复

使用道具 举报

发表于 2014-2-28 17:07 | 显示全部楼层
嵌套的话比较复杂,要一个一个解套,比较麻烦
回复

使用道具 举报

发表于 2014-4-11 15:54 | 显示全部楼层
入门学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 15:24 , Processed in 0.296190 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表