【问题标题】:Random string from an array Excel来自数组 Excel 的随机字符串
【发布时间】:2016-02-25 22:47:11
【问题描述】:

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

我的公式是这样的:

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

但是,每当我在工作表之间切换时,值都会发生变化,并且一旦随机选择就不会固定。

有人有什么想法吗?

【问题讨论】:

  • 可能不是最佳解决方案,但您可以关闭自动计算。
  • RANDBETWEEN 是不稳定的,因为每次工作簿重新计算时都会重新计算。因此,当离开工作表时,它将重新计算。唯一的解决方法是复制和粘贴值。
  • 我还敢打赌,如果您将所有随机数存储在不同的电子表格中,然后在公式中链接到它们,它们就不会改变。
  • 我会为此使用 VBA。这样您就可以随时触发它,而不必担心禁用自动计算。

标签: excel excel-formula formula


【解决方案1】:

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

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

如果你清空 A1,那么 B1 也将是空的。如果你在 A1 中放了任何东西,那么 B1 会随机选择并保留它,直到你再次清空 A1(其中 B1 也将再次为空)

或者,只需复制您的公式并粘贴“仅值”...但公式将那样消失...

【讨论】:

    【解决方案2】:

    您可以使用自引用 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(编辑单元格)并按 Enter,您将强制它重新计算并获得一个新的(或与 randbetween 规则相同)值,如果您按 F9(重新计算)它不会改变。

    【讨论】:

    • 如果未启用迭代计算,您稍后仍会收到循环引用警告。但是:启用它,会使 UDF 在我眼中过时......最好将另一个单元格作为触发器(这样您可以避免设置内部的更改)
    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-08
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2021-03-16
    相关资源
    最近更新 更多