三十三 条件循环
1 do…loop:
do 循环头
循环体
loop 循环尾
2 子句:
a当型循环:while
do while i<5
i=i+1
loop
b直到型循环:until
do until i=5
i=i+1
loop
3 可以在do头部判断,也可在until尾部判断
头部循环可能一次也不执行,尾部循环至少执行一次。
'在VBA中实现条件循环的语句叫做 Do ... Loop 循环结构
'Do 循环头
'循环体
'Loop 循环尾
'如果只写Do ... Loop 那么就是无穷无尽的循环,屎(死)循环.
'当型循环意思就是,当条件为真的时候进行循环
'直到型循环,意思就是,当条件为真的时候终止循环
Sub doLoop循环()
Dim i As Long
i = 5
Do
i = i + 1
Debug.Print i
Loop While i < 5
' Do Until i = 5
' i = i + 1
' Debug.Print i
'
' Loop
End Sub
'循环头部判断与循环尾部判断的区别,有可能差一次
'头部判断是先判断条件,如果成立就循环,不成立就一次不执行循环体语句。
'尾部判断是先执行一次循环体,然后再判断条件是否成立,成立就循环,不成立就终止。
'男女朋友
'Do
'在一起
'loop while 不是渣男
'2 ,1; 3, 2; 5, 4; 6,5 ;7,0
4爱因斯坦长阶梯
著名物理学家爱园斯坦编的问题:在你面前有一条长长的阶梯,如果你每步跨2阶,那么最后剩下1阶;如果你每步跨3阶,那么最后剩2阶;如果你每步跨5阶,那么最后刺4阶;如果你每步跨6阶,那么最后剩5阶;只有当你每步跨7阶时,最后才正好走完,一阶也不剩,请你算一算,这条阶梯到底有多少阶?
Sub 爱因斯坦长阶梯()
Dim jieti As Long
jieti = 7
Do Until jieti Mod 2 = 1 And jieti Mod 3 = 2 And jieti Mod 5 = 4 _
And jieti Mod 6 = 5
jieti = jieti + 7
Loop
MsgBox "爱因斯坦长阶梯最短需要" & jieti & "级。"
End Sub
5据说刘邦与韩信聊天,韩信问刘邦说,有一次我在点将台点兵,每3人一列余1人、5人一列余2人、7人一列余4人、13人一列余6人。主公看看有多少兵马?刘邦茫然而不知其数。
三十四 条件循环:复利单利的计算
'10万元 两个产品投资: 单利 年7%
'复利 年2.5%
Sub 单利与复利投资()
Dim 本金 As Double, 单利总金额 As Double, 复利总金额 As Double
Dim y As Long '代表年数
Const dli As Double = 0.07, fli As Double = 0.025 'dli单利利率,fli 复利利率
本金 = 100000
y = 0
单利总金额 = 本金
复利总金额 = 本金
Do
y = y + 1
单利总金额 = 本金 * dli * y + 本金
复利总金额 = 复利总金额 * (1 + fli) ^ y
Loop Until 复利总金额 > 单利总金额
MsgBox y
End Sub
Sub paper()
'作业题1:一张纸的厚度大概是0.5mm,,假设纸可以无限对折,每次对折后纸的厚度增加一倍。
'那么请问对折多少次之后,纸的厚度会超过珠穆朗玛峰(8848.13m) ?
'·提示:请注意米与毫米的换算单位是1:1000
Dim a#, s#, n&
a = 0.5
s = 8848130
n = 1
Do Until a * 2 ^ n > s
Debug.Print n & "==>" & a * 2 ^ n
Debug.Print
n = n + 1
Loop
End Sub
三十五 循环嵌套
1 Cells(3, 1) = 1 将第三行第一列单元格填充内容为1
2 vbCr 连接表示显示时换行。
'Range(地址) 访问单元格
'R1C1 Cells(行数,列数) A 1
'Sub Test()
' Cells(1, 1) = 1
'
'
'End Sub
Sub 循环嵌套()
Dim i As Long, j As Long
For i = 1 To 5
For j = 1 To 4
Cells(i, j) = i & j
Next
Next
End Sub
'循环嵌套的循环次数是相乘的关系
'百钱买百鸡
'铜钱是不可分割单位
'公鸡 5文铜钱一只 母鸡3文铜钱一只 小鸡 一文钱 3 只
'有100文钱用来买鸡,要求正好买100 只鸡,三种鸡都必须有,那么有几种买鸡的方案
'穷举法
Sub 百钱买百鸡()
Dim 公鸡 As Long, 母鸡 As Long, 小鸡 As Long
Dim count As Long
For 公鸡 = 1 To 20 '1 只公鸡
For 母鸡 = 1 To Int(100 / 3)
小鸡 = 100 - 公鸡 - 母鸡
If 公鸡 * 5 + 母鸡 * 3 + 小鸡 / 3 = 100 Then
count = count + 1
MsgBox "第" & count & "种买鸡方案:" & vbCr & "公鸡: " & 公鸡 & "只" _
& vbCr & "母鸡: " & 母鸡 & "只" & vbCr & "小鸡:" & 小鸡 & "只。"
End If
Next
Next
End Sub
第36讲-条件循环与循环嵌套作业讲解
'作业2: 水仙花数
'数学上把一个3位数100-999 之间的,如果它的百位数^3+十位数^3+个位数^3的和正好等于这个数自身,
'那么这个数就叫水仙花数。请编程实现输出所有的水仙花数
'
Sub 水仙花数()
Dim i&, j&, k& '分别表示百位,十位和个位数
For i = 1 To 9
For j = 0 To 9
For k = 0 To 9
If i * 100 + j * 10 + k = i ^ 3 + j ^ 3 + k ^ 3 Then
Debug.Print i * 100 + j * 10 + k
End If
Next
Next
Next
End Sub
第37讲-循环的未尽事宜
1 For each元素in容器循环:这个循环主要用于对象在集合(容器)中进行遍历循环。Each是每一个的意思,这个循环我们在后面讲对象和容器的时候详细讲解。
.2 VBA有三大容器()∶集合、数组和字典
3 强制退出循环的语句: Exit for , Exit do分别对应for (包括for each)循环与do loop循环