excel学习库

excel表格_excel函数公式大全_execl从入门到精通

Excel制作年会抽奖程序,VBA源码,就是这么简单

公司年会中,如果有一个抽奖环节,那就是需要有一个随机过程来进行抽奖活动。

本节将介绍一个小方法,通过一个VBA代码来实现整个抽取过程。

实现方法

既然是抽奖,那么就涉及到一个随机过程,也就是说不一定抽到谁,但要有一个抽取名单,也就是一个随机池。

我们把这个随机池设定为一个工作表单元格内容,或者是一个数组,本节示例中以数组来进行随机抽取。

过程界面如下图所示:

三个按钮,一个开始、一个停止和一个重置复位。

每个按钮有不同的过程。

随机过程中会对已经抽取出来的名字进行一个筛选处理,也就是说下次抽取就不会再把已经抽取的人再次抽取出来。

实现方法是将已经抽取的人放置到一个数组里,下次抽取通过遍历这个数组就可以确定是否已经抽取出来,如果存在就不进行抽取。

代码

全局变量定义

Option Explicit

Dim xArr()'定名义单数组

Dim isID As Integer

Dim isIDarr(), iid As Integer'定义筛选名单数组

Dim isTrue As Boolean'定义退出循环变量

开始按钮代码

Private Sub 开始抽取()

On Error Resume Next

Me.CommandButton1.Enabled = False

isTrue = False

Dim xCaption As String

Dim xR As Range, r As Range, ir As Long

ir = ThisWorkbook.Worksheets(2).Range("A65535").End(xlUp).Row

If ir <= 1 Or ir > 65535 Then Exit Sub

Set xR = ThisWorkbook.Worksheets(2).Range("A2:A" & ir)

If xR.Count <> 1 Then

xArr = Application.WorksheetFunction.Transpose(xR)

Else

ReDim xArr(0, 0)

xArr(0, 0) = xR.Value

End If

Dim idTrue As Boolean

Do'循环抽取

idTrue = False

isID = VBA.Int((UBound(xArr, 1) - 1 + 1) * Rnd + 1)

For iid = LBound(isIDarr) To UBound(isIDarr)

If isIDarr(iid) = isID Then

idTrue = True

Exit For

End If

Next iid

If Not idTrue Then

xCaption = xArr(isID)

Me.Shapes(1).TextFrame.Characters.Text = xCaption'显示名单

End If

DoEvents

Loop Until isTrue

ir = ThisWorkbook.Worksheets(2).Range("C65535").End(xlUp).Row + 1

ThisWorkbook.Worksheets(2).Range("C" & ir).Value = xCaption

Set xR = Nothing

Set r = Nothing

Erase xArr

End Sub

停止按钮代码

Private Sub 停止()

On Error Resume Next

isTrue = True'退出循环

If UBound(xArr) = UBound(isIDarr) Then

MsgBox "没有可选人了!", vbInformation, "提示"

Exit Sub

End If

Me.CommandButton1.Enabled = True

ReDim Preserve isIDarr(UBound(isIDarr) + 1)

isIDarr(UBound(isIDarr)) = isID

End Sub

重置按钮代码

Private Sub 重置()

Dim ir As Integer

Me.CommandButton1.Enabled = True

ir = ThisWorkbook.Worksheets(2).Range("C65535").End(xlUp).Row + 1

ThisWorkbook.Worksheets(2).Range("C2:C" & ir).Value = ""

Erase isIDarr

ReDim isIDarr(0)

End Sub

工作表

工作表就简单了,三个字段,第一列为所有抽取人姓名,第二列设置奖项,第三列是自动添加抽取出来的名单。

这样就完成了一个抽奖过程程序制作,应用起来很简单。

欢迎关注、收藏

---END---

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接