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

上一篇讲的是当使用 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更容易理解),大家可以根据自己的喜好进行选择。

(0)

相关推荐

  • VBA 程序循环结构

    VBA 中,循环结构用于多次重复执行同一段代码.重复次数通过特定数字或特定条件控制. 通过控制循环过程中特定变量,循环结构可执行复杂的重复任务. 循环结构的执行流程可简单的表示如下: 本文目录 隐藏 ...

  • 流程控制语句-while循环

    和for循环有相同功能的还有while循环, while循环重复执行一段代码,直到某个条件不再满足/while语句结构: 1 while(判断条件) 2 { 3 循环语句 4 } 举例1:使用whil ...

  • (十二)Do.....Loop循环控制语句

    当循环条件设置不当时,也会造成死循环 一.do while\until--.loop do while--.loop先判断先执行:当判断条件为真时,执行循环体 do until--.loop先判断后执 ...

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

    介绍四种循环语句的语法: 一.For 循环语法: For 变量=数值 to 数值 Step 步值 "需要执行的语句' Next 变量 Next 后面的"变量名",经常被省 ...

  • 【烟花原创】VBA零基础之第17篇 Do…Loop循环 (一)

    上一篇聊过了以指定次数执行语句的For Next循环,但是当我们不知道循环具体会运行多少次,但能通过某种条件的变化来实现控制循环的开始和结束,这便是今天咱们要聊聊的的Do-Loop循环. 一.当条件为 ...

  • 【烟花原创】VBA零基础之第30篇 对象(五)

    一篇我们讲了如何引用对象,主要是通过从对象集合中进行引用,今天我们讲讲如何使用对象变量来引用对象. 什么是对象变量呢? 前面已经有过讲变量了,通俗的说,就是变量的类型是对象类型,象单元格,工作表,工作 ...

  • 【烟花原创】VBA零基础之第28篇 对象(三)

    上一篇讲到了对象,在VBA中,还有一个非常重要的概念:集合Collections 集合是一个包含一组类型相同的对象集.另外,其实集合自身也是一个对象. 下面列出一有些经常使用到的集合对象: 工作簿集合 ...

  • 【烟花原创】VBA零基础之第12篇 常量

    上一篇讲了变量,这一讲咱们聊聊常量(也有MS管叫常数). 一.什么是常量     常量就是程序在运行时保持一个固定的值的命名项目.     常量可以是字符串,数值,另一常量,或者任何(除Is之外) 算 ...

  • 【烟花原创】VBA零基础之第29篇 对象(四)

    引用对象是非常重要的,因为在代码里访问对象时必须指明需要操作的对象. 例如在日常中我们找某人的,肯定会喊某人的名字(不认识的可以喊美女帅哥),人家才会理你. 可在VBA代码中,你必须实打实的指明某个特 ...

  • 【烟花原创】VBA零基础之第27篇 对象(二)

    上一篇我们讲到Excel自身就是一个对象,应用程序(Application)是这个对象层次中的最顶层,下面列出了在Application对象中一些经常使用到的对象: 引用Addin 窗口Window ...

  • 【烟花原创】VBA零基础之第26篇 对象(一)

    对象,这词大家再熟悉不过了,此对象非彼对象. 对象代表应用程序中的元素. 例如在Excel中,我们用到的单元格,工作表,工作簿,图表,数据透视表等等都是对象. 引用JAVA<编程思想>里面 ...

  • 【烟花原创】VBA零基础之第19篇 Goto语句

    通过Goto语句,可以无条件地转移到过程中的指定的行,从而实现不同程序段间作流程控制. 语法: GoTo Line Line:必要参数,line可以是过程内任意的行号或行标签. 什么是行号? 用来识别 ...

  • 【烟花原创】VBA零基础之第15篇 Select Case 语句

    上一篇的咱们聊了IF-Then-Else语句,在块形式的IF判断中,如果条件比较多,IF-Then-Else 语句会计算每个Elseif 语句的表达式,另外当条件多时,Elseif对于代码的可读性大打 ...