如果另一列在同一行中具有值,则从列表中提取随机值

时间:2015-07-14 10:52:11

标签: excel list random

我有一个命名实体列表和一个经过审核的频率图表:

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,但我愿意接受它。

2 个答案:

答案 0 :(得分:0)

=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。如果你把八月它将返回E2:E5。如果你拼错了,你就会收到错误。

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

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

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

这将选择1和1列中所有空白单元格的随机数。

LARGE(array,RANDBETWEEN(...))

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

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

最后,第n个最大行放在INDEX中以返回名称。

答案 1 :(得分:0)

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

enter image description here

"名称"是指A2:A5," May"是指B2:B5,......"指数"是指F2:F5(几乎立即在公式选项卡的名称部分中使用Create from selection完成,但请确保使用顶行而不是左列作为名称来源)。我也制作了#34; Target"参考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不是在空白单元格上执行删除操作,而是触发工作表计算的标准方法(可能很高兴知道您的整个屏幕是否填充了您不想要的值的单元格删除)。