Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:当迭代开始产生与上次迭代相同的结果时,如何停止迭代?_Excel_Vba - Fatal编程技术网

Excel VBA:当迭代开始产生与上次迭代相同的结果时,如何停止迭代?

Excel VBA:当迭代开始产生与上次迭代相同的结果时,如何停止迭代?,excel,vba,Excel,Vba,例如下面的代码 For i = 0 to 40 R = R & "," & Application.WorksheetFunction.Min((Cell.Value + i * 5/8), 0.8) Next i 当R开始产生与上一次迭代相同的结果时,我如何停止它(例如,I=11和I=12产生相同的结果..) 我试过类似的东西 如果i=i-1则 退出 End If 但是VBA无法读取它一种方法是在对当前迭代的变量执行操作之前,添加另一个存储上一次迭代结果的变

例如下面的代码

 For i = 0 to 40
     R  = R & "," & Application.WorksheetFunction.Min((Cell.Value + i * 5/8), 0.8) 
 Next i
当R开始产生与上一次迭代相同的结果时,我如何停止它(例如,I=11和I=12产生相同的结果..)

我试过类似的东西
如果i=i-1
退出
End If

但是VBA无法读取它

一种方法是在对当前迭代的变量执行操作之前,添加另一个存储上一次迭代结果的变量。然后比较它们,如果它们匹配就退出循环

For i = 0 to 40
    Rprev = R
    R  = R & "," & Application.WorksheetFunction.Min((Cell.Value + j * 5/8), 0.8)
    If R = Rprev Then
        Exit For
    End If
Next i

您需要将以前的结果存储在某个变量中,然后将其与当前结果进行比较,如果相等,则退出

Dim previousResult as Double
Dim thisResult as Double
For i = 0 to 40
    previousResult = thisResult
    thisResult = Application.WorksheetFunction.Min((Cell.Value + i * 5/8), 0.8) 
    If previousResult = thisResult Then Exit For
    R  = R & "," & thisResult

Next

您需要将以前的结果存储在某个变量中,然后将其与当前结果进行比较,如果相等,则退出。您没有提供足够的上下文/代码来真正提供完整的解决方案
i
甚至没有在这里的代码中使用,因此不清楚不同的
i
值如何产生不同的结果(例如,从
Min
函数?)。哦,它实际上是
i
而不是公式中的
j
,这几乎肯定是不正确的,由于
R
是一个串联字符串,随着每次迭代而增长,因此如果R=Rprev,则设置
Rprev=R
将永远不会满足后面的条件
,因为
R
在进行比较之前会发生变化。你是对的,没有想到这一点。当前迭代R将始终至少添加一个“,”,谢谢。我想知道Cell.values是否是一行数字而不是单个单元格。这是怎么回事?