Excel精英培训网

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

[分享] 【烟花原创】VBA零基础之第18篇 Do…Loop循环 (二)

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

  上一篇讲的是当使用 While 关键字去检查 Do...Loop 语句中的条件时,有两种方法。
  可以在进入循环之前检查条件,也可以在循环至少运行一次之后才检查条件。
  今天要讲的是在Do…Loop循环中使用 Until 关键字去检查 Do...Loop 语句中的条件时,与While 关键字一样也是条件前置与条件后置。
  所不同的是,While 关键字是当条件为True时执行循环,而Until 关键字是当条件为True时结束循环,条件为False时执行循环(循环到当条件为True止)。

二、直到条件为True 时结束循环
 语法:
 1.条件前置
  Do Until 条件表达式
   执行语句
   Exit Do
   执行语句
   条件控制语句
  Loop

 2.条件后置
  Do
   执行语句
   Exit Do
   执行语句
   条件控制语句
  Loop Until 条件表达式

 条件表达式:可选参数,其值为True或False,当省略条件表达式时,Until关键字也不需要写。
 示例省略了 Until 和条件表达式,但这样循环如果不用上Exit Do则永远无法结束。
 Dim i As Long
 Do
  i = 1
 Loop

 Exit Do:通常用于条件判断之后,例如 If...Then。
 在这种情况下,Exit Do 语句将控制权转移到紧接在 Loop 命令之后的语句(提早退出所在的Do…Loop循环)。
 Dim i As Long, j As Long
 i = 1: j = 1
 Do Until i >=100
  j = j + i
  If j > 100 Then Exit Do
  i = i + 1
 Loop
 MsgBox "i=" & i

 上述1,2两种形式的区别在于,形式1是先判断条件,为False则执行语句,否则执行Loop之后的语句;
 形式2是先执行一次,执行完后再进行判断,条件为False的情况下再继续执行循环。
 简单的说,就是形式1(条件前置)有可能循环语句一次也不会执行,形式2(条件后置)最少执行一次。
 例如
 Dim counter As Integer
 Dim myNum As Integer
 counter = 0
 myNum = 9
 Do Until myNum <=10
  counter = counter + 1
  myNum = myNum - 1
 Loop
 'myNum的初始值是9,测试条件是myNum<=10。
 '由于是条件前置,所以先检测条件,结果为True,循环执行0次

 Dim counter As Integer
 Dim myNum As Integer
 counter = 0
 myNum = 9
 Do
  counter = counter + 1
  myNum = myNum - 1
 Loop Until myNum <= 10
 'myNum的初始值是9,测试条件是myNum<=10。
 '由于是条件后置,先执行一次循环然后再判断,结果为True,循环结束,循环执行1次。

 条件控制语句:              可选语句
 在For…Next循环中,计数器变量在执行完语句后会自动累加步长值。
 在Do…Loop循环中,有时条件是需要自己写语句进行控制的。
 如果不写,在没有Exit Do的情况下,循环会永远无法结束,这样就陷入死循环中了。
 例如下面的代码:myNum的初始值是20,循环的条件是mynum<=10,
 条件控件语句是mynum=mynum-1,如果缺少条件控制语句,循环无法停止。
 Dim counter As Integer
 Dim myNum As Integer
 counter = 0
 myNum = 20
 Do Until myNum <= 10
  counter = counter + 1
  myNum = myNum - 1
 Loop

 循环体内执行的可执行语句也是可选的,通常情况下都会写。

 示例,用循环的方法求大于0的整数的2进制数值(10进制转2进制)
 Sub Dec2Bin()
  '大于0的整数转换成2进制
  Dim i As Long, j As Long
  Dim str As String, strMsg As String
  i = 1000: j = i
  Do Until i = 0
   str = i Mod 2 & str
   'i mod 2 取得 i 除以2的余数
   i = i \ 2
   '\,用来对两个数作除法并返回一个整数
  Loop
  strMsg = j & " 的2进制数为:" & vbCrLf
  strMsg = strMsg & str & vbCrLf
  MsgBox strMsg
 End Sub

 大家可以把本篇中的例子与上一篇中的做下对比,就会发现,除开关键字换了,就是条件表达式略有改动而已。
 其实使用While的条件表达式与使用Until的条件表达式的逻辑值是刚好相反的(实现相同功能的前提下,一个为True,则另一个必为False),可以利用Not语句,进行逻辑转换。

 例如
 Dim i As Integer
 i = 1
 Do While i < 100
  i = i + 1
 Loop

 Dim i As Integer
 i = 1
 Do Until not i<100
  i = i + 1
 Loop

 Dim i As Integer
 i = 1
 Do Until  i>=100
  i = i + 1
 Loop

 在爬代码的过程中,在使用Do…Loop循环时,具体使用哪个关键字的条件表达式(While更容易理解),大家可以根据自己的喜好进行选择。
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-11-11 22:55 | 显示全部楼层
回复

使用道具 举报

发表于 2013-11-11 23:02 | 显示全部楼层
回复

使用道具 举报

发表于 2013-11-13 14:49 | 显示全部楼层
{:1112:}
回复

使用道具 举报

发表于 2013-11-26 18:58 | 显示全部楼层
回复

使用道具 举报

发表于 2013-12-16 08:56 | 显示全部楼层
谢谢老师,已收藏
回复

使用道具 举报

发表于 2013-12-26 23:58 | 显示全部楼层
做个记号,明天接着看。
回复

使用道具 举报

发表于 2014-1-27 12:15 | 显示全部楼层
修炼第18集中
这个好像和上集差不多
回复

使用道具 举报

发表于 2014-4-13 15:25 | 显示全部楼层
过来学习了
回复

使用道具 举报

发表于 2014-4-25 16:35 | 显示全部楼层
这个学号就可以交差了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 18:39 , Processed in 0.397641 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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