【问题标题】:Pull a random value from a list if another column has a value in same row如果另一列在同一行中有值,则从列表中提取随机值
【发布时间】:2015-07-14 10:52:10
【问题描述】:

我有一份命名实体的列表和一张关于它们被审计频率的图表:

Name   May  June  July  Aug
Alpha  2    1     1     
Beta   1    1     
Gamma  1    1     1
Delta  1    1     

我正在尝试让单元格显示在给定月份中至少没有被审核一次的单元格。

我管理过的最好的方法是使用两个单元格,一个名为“RandNum”的单元格与

=INDEX(A2:A5,RANDBETWEEN(1,COUNTA(A2:A5)))

我用来获取随机返回值的另一个单元格,如果它返回的值已经过该月的审核,它会显示“再试一次”。在示例 4 中是 7 月的列。当我在空白单元格上点击删除时,它会更新。

=IF(VLOOKUP(RandA,A2:E5,4)>=1,RandNum,"Try Again")

如果我能提供帮助,我宁愿不求助于 VBA,但我愿意接受。

【问题讨论】:

    标签: excel list random


    【解决方案1】:
    =INDEX($A$1:$A$5,LARGE((INDEX($B$2:$E$5,,MATCH(D9,$B$1:$E$1,FALSE))=0)*(ROW($A$2:$A$5)),RANDBETWEEN(1,COUNTIF(INDEX($B$2:$E$5,,MATCH(D9,$B$1:$E$1,FALSE)),""))),1)
    

    把你想要的月份放在D9中,上面作为数组公式输入(Ctrl+Shft+Enter)

    INDEX($B$2:$E$5,,MATCH(D9,$B$1:$E$1,FALSE))
    

    这部分在两个地方。它返回有问题的列。如果将七月放在 D9 中,它将返回 D2:D5。如果您输入 Aug,它将返回 E2:E5。如果你拼错了,你会得到一个错误。

    (INDEX(...)=0)*(ROW($A$2:$A$5))
    

    这会返回一个数组,对于 7 月,它看起来像 {0,3,0,5},对于 8 月,它看起来像 {2,3,4,5]

    RANDBETWEEN(1,COUNTIF(INDEX(...),""))
    

    这会在 1 和列中所有空白单元格的计数之间选择一个随机数。

    LARGE(array,RANDBETWEEN(...))
    

    这会选择数组中第 n 个最大的行,其中 nth 是随机的。它不会选择一个已经过审计的,因为它们在数组中为零,而且零永远不会是最大的(除非每个人都经过审计)。

    =INDEX($A$1:$A$5,LARGE(...),1)
    

    最后,将第 n 大的行放入 INDEX 中以返回名称。

    【讨论】:

      【解决方案2】:

      我添加了一个辅助列并创建了一堆名称:

      "Name" 指 A2:A5,"May" 指 B2:B5,..."indices" 指 F2:F5(在公式选项卡的名称部分使用 Create from selection 几乎立即完成,但请确保您使用第一行而不是左列作为名称来源)。我还让“目标”指的是 A8。然后在F2我输入:

      =IF(INDEX(INDIRECT(Target),1+ROW()-ROW(Name)) = 0,1+ROW()-ROW(Name),0)
      

      并通过 F5 将其复制下来。最后在我输入的高亮单元格中:

      =INDEX(Name,LARGE(indices,RANDBETWEEN(1,COUNTIF(indices, ">0"))))
      

      这是(我认为)你想要的。此外,F9 不是在空白单元格上点击删除,而是触发工作表计算的标准方法(如果您的整个屏幕充满了您不想删除其值的单元格,这可能会很好)。

      【讨论】:

      • 我一直在尝试实现这个解决方案,但我遇到了循环引用错误
      • 不应该这样。我的猜测是你的名字指的是太大的范围。在上面的屏幕截图中,请注意“May”是 B2 的名称:B5 不是 B 列的所有名称。如果您的名称太大以至于包含包含最终公式的单元格(在本例中为 B7)那么你会得到一个循环引用。当我设置名称时,我在调用 Create from selection 之前选择了 A1:E5。我的猜测是您在选择之前选择了所有列 A 到 E。
      猜你喜欢
      • 1970-01-01
      • 2016-06-14
      • 2018-10-24
      • 2014-10-05
      • 2020-01-26
      • 2020-05-18
      • 1970-01-01
      • 2011-01-31
      • 2019-05-13
      相关资源
      最近更新 更多