Excel精英培训网

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

[已解决]请教,为什么这个循环的变量会比我预计的结果大1 。

[复制链接]
发表于 2012-8-12 17:59 | 显示全部楼层 |阅读模式

  1. <P>Sub 循环语句增加变量数值()</P>
  2. <P>Dim i As Integer
  3. For i = 0 To 100
  4. i = i + 1
  5. Next
  6. End Sub</P>
复制代码
我理解变量最终值是101才对,因为最后一次是i=100+1。但本地窗口显示变量最后是102,为什么会这样?
最佳答案
2012-8-12 19:37
用两个简单的代码来看问题

  1. Sub c()
  2. Dim X As Integer
  3.   For X = 1 To 1
  4.   Next
  5.   MsgBox X
  6. End Sub

  7. Sub cc()
  8. Dim X As Integer
  9.   For X = 1 To 2
  10.     X = X + 1
  11.   Next
  12.   MsgBox X
  13. End Sub

  14. Sub ccC()
  15. Dim X As Integer
  16.   For X = 1 To 2 Step 2
  17.   Next
  18.   MsgBox X
  19. End Sub
复制代码
过程 C 循环是1 到 1 自然只会循环1 次,
因为 这种循环在 next 处是自动
累加步长的(省略了 step 则步长是1)

所以C过程最后的 x是 2

而 过程 CC 则 和 过程 CCC 是一样的了,
只是 CC 把步长写在了循环内部,即x=x+1

而 CCC 则是在循环开始的时候设置的步长,

所以最后 他们的值都是 3


excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-8-12 18:04 | 显示全部楼层
因为你循环里面还有i=i+1,这个循环相当于step是2
回复

使用道具 举报

发表于 2012-8-12 18:15 | 显示全部楼层
如果 for i=0 to 奇数
最终奇数+1
如果 for i=0 to 偶数
最终奇数+2
主要是理解 i=i+1,你在用F8在本地窗口中看一下i的变化
回复

使用道具 举报

 楼主| 发表于 2012-8-12 18:17 | 显示全部楼层
hrpotter 发表于 2012-8-12 18:04
因为你循环里面还有i=i+1,这个循环相当于step是2

你好,但是如果改成这样,变量的值最后是100,即比99大1 。
  1. Sub 循环语句增加变量数值()

  2. Dim i As Integer, a As Integer
  3. For i = 0 To 99
  4. i = i + 1
  5. Next
  6. End Sub
复制代码
但改下面这样,变量最后会比100大2。
  1. For i = 0 To 100
复制代码
回复

使用道具 举报

发表于 2012-8-12 18:22 | 显示全部楼层
因为你的step是2呀,循环到99相当于循环到98,然后再加2
回复

使用道具 举报

 楼主| 发表于 2012-8-12 18:25 | 显示全部楼层
JLxiangwei 发表于 2012-8-12 18:15
如果 for i=0 to 奇数
最终奇数+1
如果 for i=0 to 偶数

你好。
就是用F8,正是这个问题无法理解。
i从0循环到100,第一次是0,就把0拿出来,0+1=1;循环第二次,把1拿出来,1+1=2……;最后一次是100,就把100拿出来,100+1=101;然后就没有了啊。
除非再循环一次,把101拿出来,101+1=102。
回复

使用道具 举报

发表于 2012-8-12 18:26 | 显示全部楼层
你可以直接这样
  1. Sub 循环语句增加变量数值()

  2.     Dim i As Integer, a As Integer
  3.     For i = 0 To 100 Step 2
  4.         代码
  5.     Next
  6. End Sub
复制代码
不然你会搞糊涂的
回复

使用道具 举报

 楼主| 发表于 2012-8-12 18:30 | 显示全部楼层
hrpotter 发表于 2012-8-12 18:22
因为你的step是2呀,循环到99相当于循环到98,然后再加2

你好。
i从0循环到100,第一次是0,就把0拿出来,0+1=1;循环第二次,把1拿出来,1+1=2……;最后一次是100,就把100拿出来,100+1=101;然后就没有了啊。
除非再循环一次,把101拿出来,101+1=102。

不理解为什么step是2,我又没写上。
回复

使用道具 举报

发表于 2012-8-12 18:33 | 显示全部楼层
silenthunter 发表于 2012-8-12 18:25
你好。
就是用F8,正是这个问题无法理解。
i从0循环到100,第一次是0,就把0拿出来,0+1=1;循环第二次 ...

如果是
FOR I=0 TO 100
i=i+1
next i
当I=100时,执行I=I+1,即是100+1=101,继续执行next I,这时i=102,发现102已经大于100,退出循环,结束程序。
FOR I=0 TO 99
i=i+1
next i
当I=99时,执行I=I+1,即是99+1=100,继续执行next I,这时i=101,发现101已经大于100,退出循环,结束程序。
这下能够理解了吧
回复

使用道具 举报

发表于 2012-8-12 18:35 | 显示全部楼层
101是循环里面的结果,还要通过外循环next想当于+1,102后再判断在不在你的循环范围内,102不在范围内然后跳出循环,结果就为102
上面的循环到99的话,当循环到98,i=i+1,就是99了,然后运行next,就成为了100,这样就不在99的范围内了,就跳出循环,结果就为100
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-15 06:28 , Processed in 0.329968 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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