欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    循环结构.docx

    • 资源ID:14421381       资源大小:36.55KB        全文页数:33页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    循环结构.docx

    1、循环结构3.3 循环结构在实际开发的应用系统中,经常需要重复执行一条或多条语句。这种结构称为循环结构。循环结构的思想是利用计算机高速处理运算的特性,重复执行某一部分代码,以完成大量有规则的重复性运算。VBA提供了多个循环结构控制语句:DoLoop结构、WhileWend结构、ForNext结构、For EachNext结构。例024 密码验证1案例说明在信息管理系统中,很多时候都需要用户进行登录操作。在登录操作时要求用户输入密码,一般都要给用户三次机会,每次的输入过程和判断过程都相同。本例使用DoLoop循环完成密码验证过程。2关键技术在VBA中,最常用的循环语句是DoLoop循环。循环结构D

    2、o WhileLoop的语法格式如下:Do While 逻辑表达式 语句序列1 Exit Do 语句序列2Loop其中Do While和Loop为关键字,在Do While和Loop之间的语句称为循环体。当VBA执行这个Do循环时,首先判断“逻辑表达式”的值,如果为False(或零),则跳过所有语句,执行Loop的下一条语句,如果为True(或非零),则执行循环体,当执行到Loop语句后,又跳回到Do While语句再次判断条件。在循环体中如果包含有Exit Do语句,当执行到Exit Do语句,马上跳出循环,执行Loop的下一条语句。其流程图如图3-22所示。图3-22 Do WhileLo

    3、op流程图VBA的DoLoop循环有4种结构,分别如下: Do WhileLoop循环:先测试条件,如果条件成立则执行循环体。 DoLoop While循环:先执行一遍循环体,再测试循环条件,如果条件成立则执行循环体。 Do UntilLoop循环:先测试条件,如果条件不成立则执行循环体。 DoLoop Until循环:先执行一遍循环体,再测试循环条件,如果条件不成立则执行循环体。3编写代码(1)新建Excel工作簿,按快捷键“Alt+F11”进入VBE开发环境。(2)单击菜单“插入/模块”命令向工程中插入一个模块。(3)在模块中编写以下VBA代码:Sub login() Dim strPas

    4、sword As String 保存密码 Dim i As Integer 输入密码的次数 Do strPassword = InputBox(请输入密码) 输入密码 If strPassword = test Then 判断密码是否正确 Exit Do 退出循环 Else MsgBox (请输入正确的密码!) End If i = i + 1 Loop While i = 3 Then 超过正常输入密码次数 MsgBox 非法用户,系统将退出! Application.Quit Else MsgBox 欢迎你使用本系统! End IfEnd Sub(4)返回Excel操作界面,在工作表中插入

    5、一个按钮,设置提示文字为“密码验证”,并为该按钮指定执行的宏为“login”。(5)单击“密码验证”按钮,弹出如图3-23所示对话框,输入密码后单击“确定”按钮进行密码的验证。例025 求最小公倍数和最大公约数1案例说明几个数公有的倍数叫做这几个数的公倍数,其中最小的一个叫做这几个数的最小公倍数。如12、18、20这三个数的最小公倍数为180。最大公约数是指某几个整数的共有公约数中最大的那个数。如2、4、6这三个数的最大公约数为2。本例使用辗转相除法求两个自然数m、n的最大公约数和最小公倍数。2关键技术本例首先求出两数m、n的最大公约数,再将m、n数的乘积除以最大公约数,即可得到最小公倍数。求

    6、最大公约数的算法流程图如图3-24所示。图3-24 最大公约数算法流程图本例使用DoLoop循环,并且没有设置循环条件。一般情况下,这种循环是一个死循环(也就是说程序将一直循环下去),因此,在这种循环结构中必须添加一个判断语句,当达到指定的条件时退出循环。如本例中使用以下语句退出循环:If r = 0 Then Exit Do3编写代码(1)新建Excel工作簿,按快捷键“Alt+F11”进入VBE环境。(2)单击菜单“插入/模块”命令向工程中插入一个模块。(3)在模块中编写以下子过程:Sub 最小公倍数和最大公约数() Dim m As Integer, n As Integer Dim m

    7、1 As Integer, n1 As Integer Dim t As Integer m = InputBox(输入自然数m:) n = InputBox(输入自然数n:) m1 = m n1 = n If m1 n1 Then m1 = n n1 = m 交换m和n的值 End If Do r = m1 Mod n1 If r = 0 Then Exit Do m1 = n1 n1 = r Loop str1 = m & , & n & 的最大公约数= & n1 & vbCrLf str1 = str1 & 最小公倍数= & m * n / n1 MsgBox str1End Sub(4

    8、)返回Excel操作环境,向工作表中插入一个按钮,为按钮指定执行上步创建的宏。(5)单击按钮,弹出如图3-25所示的输入提示框,分别输入两个数后,得到如图3-26所示的结果。 图3-25 输入数据 图3-26 最大公约数和最小公倍数例026 输出ASCII码表1案例说明目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码。ASCII码由8位二进制组成,一共可包含256个符号。本例使用循环语句输出ASCII中的可见字符,如图3-27所示。图3-27 ASCII码表2关键技术使用DoLoop循环时,可以不知道循环的具体次数。如果知道循环的次数,可以使用ForNe

    9、xt循环语句来执行循环。For循环的语法如下:For 循环变量=初始值 To 终值 Step 步长值 语句序列1 Exit For 语句序列2Next 循环变量在For循环中使用循环变量来控制循环,每重复一次循环之后,循环变量的值将与步长值相加。步长值可正可负,如果步长值为正,则初始值必须小于等于终值,才执行循环体,否则退出循环。如果步长值为负,则初始值必须大于等于终值,这样才能执行循环体。如果没有设置Step,则步长值默认为1。ForNext循环结构的流程图如图3-28所示。For循环一般都可计算出循环体的执行次数,计算公式如下:循环次数=(终值-初值)/步长值+1这里用中括号表示取整。在事

    10、先不知道循环体需要执行多少次时,应该用Do循环。而在知道循环体要执行的次数时,最好使用ForNext循环。图3-28 ForNext流程图3编写代码(1)新建Excel工作簿,按快捷键“Alt+F11”进入VBE环境。(2)单击菜单“插入/模块”命令向工程中插入一个模块。(3)在模块中编写以下子过程:Sub ascii() Dim a As Integer, i As Integer i = 3 For a = 32 To 126 Sheets(1).Cells(i, 1) = a Sheets(1).Cells(i, 2) = Chr(a) i = i + 1 NextEnd Sub(4)返

    11、回Excel操作环境,向工作表中插入一个按钮,为按钮指定执行上步创建的宏。(5)单击按钮,得到如图3-27所示的结果。例027 计算选中区域数值之和1案例说明在某些情况下,需要统计工作表中选定区域数值单元格的数值之和(例如,临时查看应发奖金之和),在Excel的状态栏就可查看选中单元格的数值之和。本例编写VBA代码,使用循环结构来完成该项功能。2关键技术用户在Excel工作表中选定单元格的数量是不固定的,若需统计所选单元格数值之和,这时可使用For Each循环来进行处理,对选中区域的每个单元格进行判断,然后再累加数值单元格的值。For EachNext循环语句的语法格式如下:For Each

    12、 元素 In 对象集合 语句序列1 Exit For 语句序列2Next使用For Each循环结构,可在对象集合每个元素中执行一次循环体。如果集合中至少有一个元素,就会进入For Each循环体执行。一旦进入循环,便先针对“对象集合”中第一个元素执行循环中的所有语句。如果“对象集合”中还有其他的元素,则会针对它们执行循环中的语句,当“对象集合”中的所有元素都执行完了,便会退出循环,然后从Next语句之后的语句继续执行。在循环体中可以放置任意多个Exit For语句,随时退出循环。Exit For经常在条件判断之后使用,例如IfThen,并将控制权转移到紧接在Next之后的语句。3编写代码(1

    13、)新建Excel工作簿,按快捷键“Alt+F11”进入VBE环境。(2)单击菜单“插入/模块”命令向工程中插入一个模块。(3)在模块中编写以下子过程:Sub 求和() Dim r Dim t As Long For Each r In Selection If IsNumeric(r.Value) Then t = t + r.Value End If Next MsgBox 所选区域数值之和为: & tEnd Sub(4)返回Excel操作环境,向工作表中插入一个按钮,修改按钮的提示字符为“求和”,为按钮指定执行上步创建的宏“求和”。(5)在工作表“Sheet1”中输入数据,如图3-29左图

    14、所示。(6)拖动鼠标选中如图3-29左图所示数据区域,单击“求和”按钮,求和结果将显示在如图3-29右图所示对话框中。 图3-29 计算选中区域数值之和例028 换零钱法(多重循环)1案例说明将十元钱换成1角、2角、5角、1元、2元、5元的零钱若干,求出一共有多少种方法进行计算?2关键技术在VBA中,循环结构内的循环体又可以是循环结构,这种情况称为循环的嵌套。VBA允许在同一过程里嵌套多种类型的循环。在编写嵌套循环程序的代码时,一定要注意每个循环语句的配对情况。如图3-30所示,其中左图是正确的嵌套关系,第一个Next关闭了内层的For循环,而最后一个Loop关闭了外层的Do循环。同样,在嵌套

    15、的If语句中,End If语句自动与最靠近的前一个If语句配对。嵌套的DoLoop结构的工作方式也是一样的,最内圈的Loop语句与最内圈的Do语句匹配。图3-30右图则是错误的嵌套关系。语句序列2 图3-30 正确的嵌套(左)与错误的嵌套(右)3编写代码(1)新建Excel工作簿,按快捷键“Alt+F11”进入VBE环境。(2)单击菜单“插入/模块”命令向工程中插入一个模块。(3)零钱换法最简单的算法是:使用多重循环,将10元钱能换成的各种可能都考虑进去(如10可换为100个1角,可换为50个2角,等等)。根据这种算法在模块中编写以下子过程:Sub 换零钱1() Dim t As Intege

    16、r For i = 0 To 100 1角 For j = 0 To 50 2角 For k = 0 To 20 5角 For l = 0 To 10 1元 For m = 0 To 5 2元 For n = 0 To 2 5元 If i + 2 * j + 5 * k + 10 * l + 20 * m + 50 * n = 100 Then t = t + 1 Sheets(1).Cells(t + 1, 1) = i Sheets(1).Cells(t + 1, 2) = j Sheets(1).Cells(t + 1, 3) = k Sheets(1).Cells(t + 1, 4)

    17、= l Sheets(1).Cells(t + 1, 5) = m Sheets(1).Cells(t + 1, 6) = n End If Next Next Next Next Next Next MsgBox 10元换为零钱共有 & t & 种方法!End Sub(4)运行该子过程,Excel工作表中每一行将填写一种可能的换法,如图3-31所示。(5)因为换零钱的方法很多,根据计算机的速度不同该程序的运行速度也不同,最后将通过对话框显示出总的换法次数,如图3-32所示。 图3-31 零钱换法 图3-32 换法总数(6)在循环嵌套中,内层循环体执行的次数等各外层循环数数之积,如本例代码内循

    18、环执行次数为:10151211163=21417858次(7)对于嵌套循环,一般都可以对代码进行一定的优化,使程序的执行效率更高。本例最简单的优化代码如下:Sub 换零钱2() Dim t As Long For j = 0 To 50 2角 For k = 0 To 20 5角 For l = 0 To 10 1元 For m = 0 To 5 2元 For n = 0 To 2 5元 t2 = 2 * j + 5 * k + 10 * l + 20 * m + 50 * n If t2 = 100 Then t = t + 1 i = 100 - t2 Sheets(1).Cells(t

    19、+ 1, 1) = i Sheets(1).Cells(t + 1, 2) = j Sheets(1).Cells(t + 1, 3) = k Sheets(1).Cells(t + 1, 4) = l Sheets(1).Cells(t + 1, 5) = m Sheets(1).Cells(t + 1, 6) = n End If Next Next Next Next Next MsgBox 10元换为零钱共有 & t & 种方法!End Sub(8)以上程序中内循环的执行数数如下:51211163=212058次可以看出减少最外层循环的101次,可使用内循环体提高100倍的执行效率。本

    20、例程序还有很多优化方法,这里就不再介绍。3.4 使用数组在程序中,如果要处理大量的数据,为每个数据定义一个变量将使程序变得很难阅读,并且代码很烦琐。对于大量有序的数据,可以使用数组对其进行存储和处理。在其他程序设计语言中,数组中的所有元素都必须为同样的数据类型,在VBA中,数组中各元素可以是相同的数据类型,也可以是不同的数据类型。例029 数据排序1案例说明在Excel中可以方便地对单元格区域中的数据进行排序。本例使用VBA程序首先让用户输入10个数据,然后使用冒泡排序法对这10个数进行排序。2关键技术在程序中处理大量数据时,使用数组来保存是比较好的方法。数组使用之前可以使用Dim、Stati

    21、c、Private或Public语句来声明。在VBA中,数组最大可以达到60维,最常用的是一维数组和二维数组。定义一维数组的语法格式如下:Dim 数组名(下界 To 上界) As 数据类型其中“下界”可以省略,只给出数组的上界(即可以使用的最大下标值),这时默认值为0,即数组的下标从0开始至定义的上界,如:Dim MyArray(10) As String定义了一个名为MyArray的数组,共有11个元素,分别为MyArray(0)、MyArray(1)、MyArray(10)。如果希望下标从1开始,可以通过Option Base语句来设置,其语法格式如下:Option Base 1使用该语句

    22、指定数组下标的默认下界,只能设为0或1。 该语句只能出现在用户窗体或模块的声明部分,不能出现在过程中,且必须放在数组定义之前。3编写代码(1)新建Excel工作簿,按快捷键“Alt+F11”进入VBE环境。(2)单击菜单“插入/模块”命令向工程中插入一个模块。(3)在模块中编写以下代码:Option Base 1Sub 数据排序() Dim i As Integer, j As Integer Dim k Dim s(10) As Integer For i = 1 To 10 s(i) = Application.InputBox(输入第 & i & 个数据:, 输入数组, , , , ,

    23、, 1) Next For i = 1 To 9 For j = i + 1 To 10 If s(i) s(j) Then t = s(i) s(i) = s(j) s(j) = t End If Next Next For Each k In s Debug.Print k NextEnd Sub在VBA中使用Inputbox函数接受用户输入数据时,返回的值为文本型。以上代码中使用了Application对象的InputBox方法来接受用户输入数据,该方法的语法格式如下:Application.InputBox(Prompt, Title, Default, Left, Top, Help

    24、File, HelpContextID, Type)设置Type参数可指定返回的数据类型,如本例设置其值为2,则返回的值为数值型。(4)运行上面的宏,弹出如图3-33所示的对话框,提示用户输入数据。循环程序要求用户输入10个数据。(5)最后在“立即窗口”输出排序的结果,如图3-34所示。 图3-33 输入数据 图3-34 排序结果例030 彩票幸运号码1案例说明本例结合数组和随机函数的知识,生成指定数量的彩票幸运号码。本例生成的彩票号码每注由7位数构成,首先让用户输入产生的注数,再使用循环语句生成指定注数的号码。2关键技术本例代码中使用了两个关键技术:动态数组和随机函数。(1)动态数组本例使用

    25、二维数组保存所有的彩票号码,二维数组的定义格式如下:Dim 数组名(第1维上界, 第2维上界) As 数据类型或Dim 数组名(第1维下界 To 第1维上界, 第2维下界 To 第2维上界) As 数据类型在本例中,因为生成的彩票数量是由用户输入的数据决定的。因此这里使用动态数组。动态数组是指在程序运行时大小可以改变的数组,定义动态数组一般分两个步骤:首先在用户窗体、模块或过程中使用Dim或Public声明一个没有下标的数组(不能省略括号),然后在过程中用ReDim语句重定义该数组的大小。ReDim语句在过程级别中使用,用于为动态数组变量重新分配存储空间。其语法格式如下:ReDim Preserve 数组名(下标) As


    注意事项

    本文(循环结构.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开