以下是我的数据的一个例子:
Name: Office: Years:
John Smith Canada 1
Bob Smith Canada 1
Jake Smith Canada 1
Sarah Smith Canada 1
在另一张表上,我想根据 Office 和 Years 输出一个随机名称。当我将公式向下拖动时,我希望它每次都给出不同的名称(这就是我遇到的问题)。我尝试了几种公式,这是最接近的。
=INDEX($B$2:$B$436,MATCH(SMALL(IF($D$2:$D$436&$F$2:$F$436=$H$3&$I$3,$G$2:$G$436),1),$G$2:$G$436,0))
B 列 = 姓名 D 列 = 办公室 F 列 = 年份 然后 H3 和 I3 是我的查找值
G 列是一组随机数 = rand()
答案1
我要将随机化放在公式本身中。如果您愿意,您可以随时将其放在另一列中。
A 列为名称
B 列为办公室
C 列为年份
G2 单元格是您感兴趣的办公室
G3 单元格是您感兴趣的年份
=INDIRECT("A"&LARGE(IF($B$2:$B$7=G2,IF($C$2:$C$7=G3,ROW($A$2:$A$7),0),0), RANDBETWEEN(1,COUNTIFS(B:B,G2,C:C,G3))))
这是一个数组公式,需要使用Ctrl++输入Shift。Enter
它的工作原理是创建一个包含行号的数组(如果条件匹配)或零(如果不匹配)。然后它获取n第最大值,其中n是 1 至符合条件的行数之间的随机数。
答案2
假设您想要返回 A2 中的名称(其中 A1 是标题或空白),然后在 A2 中使用此数组公式
=INDEX($B$2:$B$436,SMALL(IF(($D$2:$D$436=$H$3)*($F$2:$F$436=$I$3)*(COUNTIF(A$1:A1,$B$2:$B$436)=0),ROW($B$2:$B$436)-ROW($B$2)+1),RANDBETWEEN(1,SUM(($D$2:$D$436=$H$3)*($F$2:$F$436=$I$3)*(COUNTIF(A$1:A1,$B$2:$B$436)=0)))))
CTRL使用+ SHIFT+确认CTRL并向下复制 - 更改函数A$1:A1
中的范围COUNTIF
以匹配起始单元格上方的单元格。
注意:-使用此方法不需要一列随机数