制作步骤根据百度上有个博主发的,学习并记录一下,链接如下
https://baijiahao.baidu.com/s?id=1654171853322518408&wfr=spider&for=pc
1、 新建一个sheet取名[人员名单],包含【工号】及【人员名单】信息,工号唯一ID;
2、 新建第二个sheet取名[抽奖系统](以下步骤都在抽奖系统页面完成),按照图片样式设置奖项与中奖人员显示位置,背景色等内容按照自己喜好设置(网上下载一张好看的抽奖背景图,贴在下方);
3、在抽奖系统页面的A1单元格输入如下公式:
=RANDBETWEEN(2,COUNTA(人员名单!A:A))
RANDBETWEEN函数,随机生成区间2~COUNTA(人员名单!A:A)之间的随机数
【人员名单】第一行是标题,需要从2开始,返回的是随机的行数
再在A2单元格输入公式:
=INDEX(人员名单!A:B,抽奖系统!A1,1)&CHAR(10)&INDEX(人员名单!A:B,抽奖系统!A1,2)
,得到工号及人员名称,Char(10)为换行符,起到自动换行作用;
备注:如果没有出现换行,我们需要在“开始”选项卡中,选择“自动换行”(注意在设置时一定要选中要换行的单元格)
4、制作抽奖按钮,点击【插入】-【文本框】-【绘制横排文本框】,输入文字,设置字体:华文彩云,颜色:红色,字号:22,加粗,底色都点击【形状格式】-【形状填充】-【无填充】;
5、制作抽奖显示窗口,点击插入【文本】-【横向文本框】,点击新建的框,在上方公式栏输入:=$A$2,选中抽奖显示框中的人名和工号,设置字体颜色为红色,字号选择22,加粗,去除文本框的框线及背景色;
6、编写VBA代码,【开发工具】-【查看代码】,输入如下三段代码:(开发工具打开步骤放在文末)
#If VBA7 Then
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) ' For 64-bit Excel
#Else
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) ' For 32-bit Excel
#End If
Dim mark As Boolean
Sub 开始抽奖()
[A2] = "=INDEX(人员名单!A:B,抽奖系统!A1,1)&CHAR(10)&INDEX(人员名单!A:B,抽奖系统!A1,2)"
mark = True
Do While mark
DoEvents
Sleep 50
ActiveSheet.Calculate
Loop
End Sub
Sub 停止抽奖()
mark = False
End Sub
Sub 保存抽奖()
CH = [A1]
ActiveCell = [A2]
Sheets("人员名单").Cells(CH, 1).EntireRow.Delete
Application.EnableEvents = False
[A2] = ""
Application.EnableEvents = True
End Sub
7、再分别右击插入的矩形框,点击【指定宏】,分别指定以上设置的宏命令;
8、鼠标先点击要抽的几等奖后的单元格,然后再点击开始抽奖,名字开始滚动,点击停止抽奖,定格中奖姓名,点击保存抽奖,该单元格就显示中奖姓名。
备注:1、抽下一个奖的时候记得还是要鼠标先点击该奖品等级后面的单元格
2、已经中奖的人员会在人员名单里面删掉,所以不会重复中奖
开发工具打开步骤:
1、 点击【文件】-最下面【选项】-【自定义功能区】-勾上开发工具
2、再点击【信任中心】-【信任中心设置】-【宏设置】,勾选启用VBA宏