excel - 为什么我的循环没有遍历所有值?
问题描述
我正在尝试让 Excel vba 宏工作。我正在使用的代码如下:
Dim foo, bar, toto As Double
Dim nb As Integer
nb = 1
For bar = 1 To 1 Step 0.2
For toto = 1 To 4 Step 0.2
For foo = 1 To 2 Step 0.2
Cells(nb, 1).Value = CStr("bar " & bar & " toto " & toto & " foo " & foo)
nb = nb + 1
Next foo
Next toto
Next bar
End Sub
我希望看到案例 toto=4 打印出来。我得到的最终结果是:
bar 1 toto 1 foo 1
bar 1 toto 1 foo 1.2
bar 1 toto 1 foo 1.4
[....]
bar 1 toto 3.8 foo 1.6
bar 1 toto 3.8 foo 1.8
bar 1 toto 3.8 foo 2
变量 foo 按预期从 1 变为 2,并且每次递增 0.2。另一方面,变量 toto 从 1 变为 3.8,而不是上升到 4。
如何更改我的代码以使 toto 达到 4 ?我尝试将我的 for 循环的上限值更改为 (max + 1 step),并且对于 toto 它有效,但对于 foo 和 bar 它们是一个“额外”循环。
我试图将代码更改为基于一段时间的方法,但也没有成功。
bar = 1
toto = 1
foo = 1
nb = 1
While (bar <= 1)
toto = 1
While (toto <= 4)
foo = 1
While (foo <= 2)
Cells(nb, 4).Value = CStr("bar " & bar & " toto " & toto & " foo " & foo)
nb = nb + 1
foo = foo + 0.2
Wend
toto = toto + 0.2
Wend
bar = bar + 0.2
Wend
解决方案
这是由于浮点错误。我会避免在循环内使用Step 0.2
,而是在循环中使用乘法foo
,bar
而toto
仅0.2
在循环时使用整数:
Dim foo As Long, bar As Long, toto As Long, nb As Long
nb = 1
For bar = 1 To 5
For toto = 1 To 20
For foo = 1 To 10
Cells(nb, 1).Value = CStr("bar " & bar * 0.2 & " toto " & toto * 0.2 & " foo " & foo * 0.2)
nb = nb + 1
Next
Next
Next
另请注意,在vba中,Dim foo, bar, toto As Double
仅声明toto
为Double
. foo
并且bar
是Variant
s。
推荐阅读
- angular - Angular中表格行的关闭操作菜单项
- python - 如何在 kivymd 中使用底页更改屏幕?
- java - 什么都不做的 PrintStream
- c# - Razor Page Scaffolding:找不到名为“razorpage”的代码生成器
- node.js - 如何读取文件并将其内容记录在节点 js 中
- azure - Linux Azure Web 应用程序上的 Puppeteer
- css - React JS防止嵌套在行中的文本断字
- webpack - css-loader-构建失败
- node.js - Telegraf.js 在 sendPhoto 上添加带有标记的按钮
- javascript - jQuery 和 Bootstrap 不工作:ERR_CONNECTION_RESET