早就想写奇技淫巧系列,一直没开动,是不确定有没有人需要。随着提问的人越来越多,发现还是不少人有需求的。
首先声明,敝号主要是免费技术分享,帮助有需要的人学习进步,连文章都不愿看,只要模板的伸手党请点右上角X。谢谢!
所谓奇技淫巧,个人以为并不是有多高的难度,而是在熟练掌握 Excel 各种函数、功能的基础上,融会贯通,实现复杂的需求,是对 Excel 基本功是否扎实的考验。
今天先讲解一下怎么用 Excel 制作抽奖模板。
我用的版本是 Excel 2016,其他版本的界面可能略有不同。
案例 1:如何从 10 个人中一次性抽取 3 名获奖者,且所有中奖者不重复?
案例 2:如何从 10 个人中依次抽取 1、2、3 等奖各 1 名,每次抽取后固定住获奖者,且所有中奖者不重复?
所需函数及功能:
- RAND()
- RANK(number, ref, [order])
- INDEX(array, row_num,[column_num])
- IF(logical_test,[value_if_true],[value_if_false])
- Conditional Formatting
为了便于理解,我把每个步骤拆开来讲解。
案例 1 解决方案:
以下是 10 个人员的名单,现在需要从中一次性抽 3 个幸运儿。

1. 在 B 列用 Rand 函数生成 10 个随机数

2. 在 C 列用 Rank 函数对这 10 个随机数排序
公式:=RANK(B2,B$2:B$11)
翻译:计算 B2 单元格在 B2~B11 数组中的排名,默认从大到小排。

3. 在 D 列用 Index 函数按 C 列的随机排名抽出中奖者。因为需要一次抽 3 个人,所以我们拉 3 行公式即可。
公式:=INDEX(A$2:A$11,C2)
翻译:在A列的指定数组中,读取出第 n 行单元格

使用方法 :
- 按住 F9,数字开始滚动,抽奖开始
- 放开按键,即为抽奖结果(因为 rand 函数基本不可能出现重复值,所以中奖人不会重复)
* 请注意:由于随机函数每次都会随机变化,为了固定住获奖人员名单,请复制获胜者名单,并且 paste value 到其他单元格。

案例 2 解决方案:
增加的需求:
- 每次抽一个人,抽出后固定中奖者
- 不得重复中奖
1. 给 D 的公式加个 if 条件,同时增加辅助列 E
公式:=IF(E2=1,D2,INDEX(A$2:A$11,C2))
翻译:如果 E2 单元格为 1,则固定 D2 单元格的值,否则,继续抽奖

当我们在 E2 中输入“1”以后,无论何时按下或放开 F9 抽奖,D2 的“王7”始终是固定的。

现在我们要抽第 2 个人,但是“王7”不可以重复中奖,怎么做?
在不使用 vba 的情况下,此处推荐一种最简便的方法。
2. 选中 D2~D11 --> 按 Ctrl + Q --> 选择 Formatting --> Duplicate Values
翻译:当“中奖者”区域内有重复人员,则高亮显示

如下,当我们抽第 2 个人的时候,又抽到了“王7”,会自动高亮显示。

3. 现在抽奖器已经做好了,我们把模板调整美观,再写个操作说明。
1) 把人员名单及辅助列移到“人员名单”sheet 中

2) 选中 E 列,通过 Format Cells --> Custom,把“1”显示为“已中奖”

这就是最终的抽奖模板和使用说明,有时间的话,可以加点图片效果什么的,然后就可以在公司年会耍酷啦!

使用说明:
1、将参加抽奖的人员名单,维护在“人员名单”表里面
2、按住 F9 开始抽奖(此时可以看到B列内容一直在变化)
3、一会功夫,放手,B 列此时就是被选出来的“中奖人”
4、在 C 列的第一个黄色单元格输入“1”,以便把“中奖人”锁定
5、重复 2~4 步骤抽二等奖(如果B列出现红色背景,则重复 2~3 步骤)
6、以此类推,抽出三等奖