从数组中随机获取一个字符串(Excel)

3

我想知道是否有人可以在Excel中解决一个简单的查询问题。基本上,我想要从数组中获得一个随机生成的字符串。

我使用的公式是:

=INDEX({"Day","Night","Mixed"},RANDBETWEEN(1,3))

这个可以运行,但是每当我在不同的工作表之间切换时,所选值会改变而不是固定的。有没有任何想法?

1
可能并不是最好的解决方案,但您可以关闭自动计算。 - Matt Cremeens
2
RANDBETWEEN是一种易变函数,即每次工作簿重新计算时都会重新计算。因此,在离开该工作表时它将重新计算。唯一的解决方法是复制并粘贴数值。 - Scott Craner
我敢打赌,如果你将所有的随机数存储在不同的电子表格中,然后在公式中链接到它们,它们就不会改变。 - Matt Cremeens
我会使用VBA来完成这个任务。这样你就可以在需要的时候触发它,而不必担心禁用自动计算。 - n8.
2个回答

2

请进入选项->公式->启用迭代计算
然后在B1中使用这样的公式:

  =IF(A1="","",IF(B1="",INDEX({"Day","Night","Mixed"},RANDBETWEEN(1,3)),B1)

如果你清空A1,那么B1也会变为空。如果你向A1中放入任何内容,那么B1将随机选择并一直保留该内容,直到你再次清空A1(这时B1也会再次变为空)。
或者,只需复制你的公式并粘贴“仅值”...但这样公式就会消失...

0

您可以使用自引用的UDF,类似以下代码:

Function RandInArray(MyString As String, ByRef Target As Range)
Dim MyArr As Variant
If Target.Text = 0 Then
    MyArr = Split(MyString, ",")
    RandInArray = MyArr(Application.WorksheetFunction.RandBetween(LBound(MyArr), UBound(MyArr)))
Else
    RandInArray = Target.Value
End If
End Function

在B1单元格中,我有一个公式:=RandInArray("Day,Night,Mixed",B1) 注意它自己引用了B1。
基本上,这个公式的意思是如果你已经有一个值,那么就不要刷新它,但如果你没有一个值,那么就从传入的列表中随机选择一个。
如果你按F2(编辑单元格)并按回车键,你将强制重新计算并获得一个新的(或与randbetween规则相同的)值,如果你按F9(重新计算),它将不会改变。

如果不启用迭代计算,您仍将在以后收到循环引用警告。然而:启用它会使UDF在我看来变得过时...最好引用另一个单元格作为触发器(这样您就可以避免更改设置内部)。 - Dirk Reichel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接