
收到粉丝提问:请问excel能够实现50人滚动的抽奖名单但是却可以指定得奖人吗?
由于题主没有给到相关的名单,假设Excel中A列有50个名字,B2:B4为指定获奖人名字,想要通过函数公式来实现随机抽奖,从50人中抽取5人,其中3人为指定获奖人。
如下图所示:

我们可以借助辅助列,以及多种函数来设置抽奖功能,具体步骤如下:
步骤 1:标记指定获奖人并生成随机序列
首先,我们需要根据B列的指定获奖人,将A列中的名单标记出来,以便在后续步骤中能够确保他们被抽到;借助rand函数生成一个随机序列,用于后续的随机抽取。
因此,在 C2 中输入以下公式并向下拖动填充到 C51:
=IF(COUNTIF($B$2:$B$4,A2)>0,RAND()/1000,RAND())

公式说明:
COUNTIF($B$2:$B$4,A2)>0:计算区域 $B$2:$B$4(即指定获奖人所在区域)中满足条件 A2 的单元格个数,若大于0,则表示为指定获奖人,将其标记出来。
RAND():用于生成随机序列,便于后续抽奖能够实现滚动抽奖的效果。RAND()/1000是为了让随机数尽可能的小一些,便于后续升序排序时,能够一直排在前面。
IF(COUNTIF(…)>0,RAND()/1000,RAND()):借助IF函数判断A列中是否存在指定获奖人。
若存在,返回更小的随机数(RAND()/1000),目的是让指定获奖人的随机值变得非常小,确保排序时他们总是在前面。否则,返回随机数RAND()。
步骤 2:对随机序列排序
在 D 列对C列生成的随机序列进行排序,用于后续生成一个包含固定获奖人的随机抽奖表。在 D2 中输入以下公式并向下拖动填充到 D51:
=RANK.EQ(C2,$C$2:$C$51,1)
通过RANK.EQ函数,用于对$C$2:$C$51中的数值进行排名,其中第三个参数“1”表示升序排序。

步骤 3:生成一个包含固定获奖人的随机抽奖表
在 E 列中生成一个包含固定获奖人的随机抽奖表。在 E2 中输入以下公式并向下拖动填充到 E6:
=INDEX($A$2:$A$51,MATCH(SMALL($D$2:$D$51,ROW(A1)),$D$2:$D$51,0))
本例中获奖人为5人,因此,将该公式拖至E6即可。每次需要抽奖时,只需按下F9键,E2:E6单元格中的名字就会随机更新,并且始终包含指定的获奖人。

公式说明:
SMALL($D$2:$D$51,ROW(A1)):查找$D$2:$D$51区域内第 k 小的值,这里 ROW(A1) 返回 1,当向下拖动公式时,ROW(A1) 会依次变为 2、3 等,因此可以依次提取第二小、第三小的值,以此类推,用于实现提取前5个最小值的效果,确保指定获奖人总是被抽中。
MATCH(…,$D$2:$D$51,0)):返回提取到的最小值在$D$2:$D$51区域中的位置(即第几行)。
INDEX($A$2:$A$51,…):提取 D2:D51 列中指定最小值对应的 A2:A51 列中的值(即随机获奖人)。
步骤 4:对抽奖结果进行调整
其实在步骤3已完成了随机抽奖的全部设置,但由于刷新时,指定的获奖人始终显示在前三个单元格中,这样会显得比较刻意且不真实。
因此,需要对得到的结果做一个随机排序,这样就能让抽奖结果全部都是随机滚动的。
在H7单元格输入这个公式:
=SORTBY(E2:E6,RANDARRAY(5))
其中,SORTBY用于根据一个或多个排序条件对数据区域进行排序。
使用SORTBY函数对抽奖结果按照RANDARRAY 函数生成 的5 个随机数进行排序,随机打乱 E2 到 E6 范围内的内容,返回一个随机排列的结果。每次刷新,排序的结果都会有所不同。

我们可以将名单和设置抽奖过程的那些单元格列隐藏起来哦,只保留显示抽奖结果的部分,
不但能保留神秘感,而且看起来更美观哟~

通过以上步骤和公式,即可实现随机滚动抽奖,且可以指定得奖人的效果。如还有疑问,欢迎留言哦~