从跨多个列的列表生成随机单元格输入,而不跨行重复

问题描述 投票:0回答:1

我试图根据多列中的相同输入列表生成随机输出,但同一输入在同一行上重复的次数不会超过 ~n 次。我正在使用它来处理几个项目,但为了简单起见,我使用以下示例/数据。

我有一列姓名(C 列),1-6,名字列在第 2 行中。在第 1 行中,跨列 D-O 是时间段。为了简单起见,我将它们标记为“第 1 周”; “第 2 周”;等等

在 A 列中,我有 6 个通用“作业”的列表,与 6 个名称相匹配。我的公式是 D3:O3,如下:

=INDEX(SORTBY($A$3:$A$8,RANDARRAY(COUNTA($A$3:$A$8))),SEQUENCE(6))

这为我提供了 A 列中每个周的列表的随机输出,但我无法弄清楚如何设置 A 列列表中的项目可以在 D-O 列(第 1-12 周)中出现的次数。请参阅下面的示例,其中列表中有 6 个“作业”,但是每个作业的重复次数可能是 0-6。我想要一个输入来确定列表中的某个项目可以在行中重复的次数,例如,列表中有 6 个项目,我想限制每个项目对于给定的情况仅出现两次行/名称。如果有12+,则只能出现一次,如果有3,则可以出现3次,以此类推

enter image description here

我不确定这是否可以使用公式实现,或者是否需要 VBA/更实用,但我还没有尝试走这条路。

也尝试合并 UNIQUE( 函数,但无法确定如何正确合并它,并且多次谷歌搜索结果为空。

excel vba random generator
1个回答
0
投票

如果您有 Excel 365,您可以使用以下公式:

=LET(l,list[List],
maxRepeat,C2,
cntWeeks,COLUMNS(F1:Q1),
names,E2:E5,
λRandom, LAMBDA(l,maxRepeat,cntWeeks,
                LET(repeatedList, INDEX(l,SEQUENCE(ROWS(l)*maxRepeat,,1,1/maxRepeat)),
                    randomSort,SORTBY(repeatedList,RANDARRAY(ROWS(l)*maxRepeat)),
                    TOROW(TAKE(randomSort,cntWeeks)))),
DROP(REDUCE("",names,LAMBDA(r,x,VSTACK(r,λRandom(l,maxRepeat,cntWeeks)))),1))

λRandom
基于 maxRepeat 创建值的扩展列表,然后随机排序该列表并获取前 12 个(= cntWeeks)值。

对 E2:E5 中的每个名称重复此操作。

© www.soinside.com 2019 - 2024. All rights reserved.