excel - 为什么我的循环没有遍历所有值?

标签 excel vba for-loop

我正在尝试让 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 步骤),对于 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 ,而是将 foobartoto 乘以 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

另请注意 中, Dim foo, bar, toto As Double 仅将 toto 声明为 DoublefoobarVariant

关于excel - 为什么我的循环没有遍历所有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63269047/

相关文章:

excel - 为什么 PasteSpecial 方法有时会抛出错误 1004?

vba - 保护允许通过 VBA 代码插入图像的 excel 工作表

vba - 需要从vba中的函数返回值

vba - 使用VBA代码,如何在Excel 2003中将Excel工作表导出为图像?

excel - 下标超出范围

r - 高效修改R中的列表

ms-access - 从 Access DB 发送包含动态名称附件的电子邮件

excel - 单击插入按钮时分配给插入按钮的宏不运行

java - 如果在主方法中声明并在循环内进行初始化,那么从 For 循环外部访问变量是否不可能在 Java 中?

c++ - 使用 STL 算法重写的指针的循环示例,没有循环?