如何在没有循环推理的情况下实现这一目标?

时间:2017-11-06 14:06:34

标签: excel vba excel-vba excel-formula

我想创建一个excel页面,首先我在值0-9之间有四个随机数,可以根据需要更新。通过在四个单元格(例如A1-D1)中使用=RANDBETWEEN(0,9),这很容易。现在是一个棘手的部分我希望每个随机数在0到9之间达到某个值时停止,这样如果我不断更新公式,如果四个随机数单元格中的一个达到某个值,它将停在那个值,然后不再产生随机数。

因此,例如,如果我将A1设置为=RANDBETWEEN(0,9),我可以继续刷新该单元格,直到它变为5(或任何其他数字0-9),然后停止。

为实现这一点,我想说一下:

=IF(A1=5,5,RANDBETWEEN(0,9))

当然这不起作用,因为它是循环的。如何在Excel中实现此目的?

2 个答案:

答案 0 :(得分:4)

在文件中 - >选项 - > FORMULA菜单,启用迭代计算。最大迭代次数为1

enter image description here

然后使用您建议的公式:

=IF(A1=5,5,RANDBETWEEN(0,9))

它等于5时会停止并停留在那里。

或者您可以使用与@ Gary'sStudent

类似的功能
Function MyRandBetween(Strt As Long, Ed As Long, Sty As Long) As Long
Application.Volatile
If Application.Caller.Value = Sty Then
    MyRandBetween = Sty
    Exit Function
Else
    MyRandBetween = Application.WorksheetFunction.RandBetween(Strt, Ed)
End If

End Function

然后你的公式将是

=MyRandBetween(0,9,5)

它将在5点停留并留在那里。否则它将随机选择一个数字。

答案 1 :(得分:1)

试试这个短宏:

Sub Leave5Alone()
    With Range("A1")
        If .Value = 5 Then
        Else
            .Value = Application.WorksheetFunction.RandBetween(1, 5)
        End If
    End With
End Sub

这可以很容易地扩展到任何范围的单元格和停止值。