最近有粉丝在后台向我提了一个工作中的小需求,具体如下:

■ 因为公司要组织一个知识竞赛,其中有一个游戏环节,需要从一组名单中随机选出指定数量的人员参加游戏,并且需要在大屏中滚动名单以增强游戏紧张感。当然最重要的是最终被选中的名单中不能有重复名单出现。她希望能通过Excel来实现这个需求。

需求分析:其实这个需求与抽奖非常类似,我们可以通过Excel的VBA宏功能来编写一个小工具来实现这个需求,说干就干,以下就是最终实现的成品效果:

excel怎么做一个vba可输入的页面(EXCEL中通过VBA宏编写一个简易抽奖小工具)(1)

抽奖小工具演示

功能说明:

第1步、名单在sheet2《名单维护》工作表的A列中输入

第2步、设置抽奖人数

第3步、点击开始按钮,名单开始滚动

第4步、点击停止按钮,出现获奖人员名单


制作步骤如下:

第一步:制作表格

excel怎么做一个vba可输入的页面(EXCEL中通过VBA宏编写一个简易抽奖小工具)(2)

第二步:编写代码

#If VBA7 Then

Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal ms As LongPtr)

#Else

Private Declare Sub Sleep Lib "kernel32" (ByVal ms As Long)

#End If

Dim mark As Boolean

Sub 立即开始()

mark = True

Do While mark

DoEvents

Sleep 100

抽奖

Loop

End Sub

Sub 停止抽奖()

mark = False

End Sub

Sub 抽奖()

Dim M&, N&, i&, j&, arr

Dim d As Object

Set d = CreateObject("scripting.dictionary")

arr = Sheet2.Range("A2:A" & Sheet2.Range("A65536").End(xlUp).Row)

Range("B4:B65536").ClearContents

M = Range("D4")

N = UBound(arr)

If N < M Then MsgBox "人数超出" & N: Exit Sub

Do While i < M

j = Int(Rnd() * N 1)

If Not d.exists(j) Then

i = i 1

d(j) = arr(j, 1)

End If

Loop

Range("B4").Resize(d.Count, 1) = Application.Transpose(d.items)

End Sub

excel怎么做一个vba可输入的页面(EXCEL中通过VBA宏编写一个简易抽奖小工具)(3)

写入代码

第三步:插入命令按钮

excel怎么做一个vba可输入的页面(EXCEL中通过VBA宏编写一个简易抽奖小工具)(4)

插入命令按钮

第四步:名单演示美化

excel怎么做一个vba可输入的页面(EXCEL中通过VBA宏编写一个简易抽奖小工具)(5)

设置格式

总结:

这个小工具的核心是:利用了字典 数组实现了名单的随机不重复抽取。

如果你也有类似的需求,可以关注本头条号:千万别学Excel,并私信回复:小工具 即可获取本教程所用课件。

图文教程创作不易,请点赞、关注并转发给更多有需求的小伙伴们吧!

送人玫瑰,手有余香!

,