主页 | excel电子表格 | Word办公 | PPT教学 | Wps文档处理 |

办公软件excel抽签不重复vba

    1. Excel抽奖不重复

    用电子表格制作抽奖的方法如下:

    1、第一:将所需抽奖的人员名字输入,当然也可以输入编号,效果都是一样的,下面以人员名字进行模拟抽奖,在对应抽奖编号栏中输入公式“=RAND()”这个中奖编号是辅助抽奖使用的,没有实际意义,但是是必须要有的,需靠这个编号来挑选抽奖,将所有编号填充完成。

    2、第二:在中奖人员名字一栏中输入公式“INDEX($B$4:$B$16,RANK(C4,$C$4:$C$16))”公式内数字与表格的数字需一一对应,大家可以自己调整,这里我是对应我的表格的数字。

    3、第三:按动“F9”即可进行摇号抽奖,按住F9一直滚动,松掉F9即可停止。

    2. excel数字滚动抽奖不重复

    可能是别的软件也设置了F9快捷键。

    关闭excel外的其它程序,看是否有冲突 如果是笔记本的话,用fn+f9试试 也可以不用F9,实现自动刷新,excel选项---公式---勾选“自动重算”

    3. excel抽奖小程序不重复

    设定一个触发器。

    当输入F9的时候,中奖人则设定为某个人。

    4. excel抽名字不重复

    用vba编个程序可以实现。

    将一个案例分享给大家。程序页面如下:

    部分代码如下:

    Private Sub CommandButton4_Click()

    '开始抽奖

    Dim zb As String, dj As String, rs As Integer

    Dim SARR(1 To 5000, 1 To 2) '存放本次抽奖的候选人清单 1-姓名 2-电话号码

    'Dim lsARR '存放最近100次的候选人

    Dim ZZ1 As Integer, ZZ2 As Integer, ZZ3 As Integer

    'Dim jgarr

    Dim ysARR(1 To 3, 1 To 3) As Integer '三种颜色参数

    Dim zjZD '仅存放姓名+半角分号(;)+4位尾号

    Dim myName As String

    Dim hxRs As Integer, ZJRS As Integer '候选人数,中奖人数

    Const lsRs = 100 '存放100位候选人

    Set zjZD = CreateObject("scripting.dictionary")

    'ReDim jgarr(1 To ZJRS) As Long

    A = 0 '

    ysARR(1, 1) = 255: ysARR(1, 2) = 250: ysARR(1, 3) = 0

    ysARR(2, 1) = 255: ysARR(2, 2) = 10: ysARR(3, 3) = 10

    ysARR(3, 1) = 255: ysARR(3, 2) = 250: ysARR(3, 3) = 0

    '清空颜色

    For I = 1 To 15

    myName = "TextBox" & I

    Set xx = Me.Controls(myName)

    xx.BackColor = RGB(255, 255, 255)

    xx.ForeColor = RGB(255, 215, 0)

    xx.Font.Size = 10

    xx.BackStyle = 0

    ZZ3 = ZZ3 - 1

    If ZZ3 = 0 Then ZZ3 = 15

    Next I

    zb = ComboBox1.Value

    dj = ComboBox2.Value

    ZJRS = ComboBox3.Value '中奖人数

    '读取还可抽取人数

    With Sheets("中奖人数设定")

    For I = 3 To 8

    If .Cells(I, 2) = zb Then Exit For

    Next I

    For j = 9 To 11

    If .Cells(2, j) = dj Then Exit For

    Next j

    kcqrs = .Cells(I, j) '可抽取人数

    End With

    If ZJRS = 0 Or ZJRS > kcqrs Or ZJRS > 15 Then

    MsgBox ("抽奖人数设置不正确!")

    Exit Sub

    End If

    ReDim jgarr(1 To ZJRS, 1 To 2)

    '读取候选人 放入sarr

    Select Case zb

    Case "A"

    lh = 2

    Case "B"

    lh = 5

    Case "C"

    lh = 8

    Case "D"

    lh = 11

    Case "E"

    lh = 14

    Case "F"

    lh = 17

    End Select

    hxRs = 0

    With Sheets("人员清单")

    HH = 3

    Do While .Cells(HH, lh) <> ""

    If .Cells(HH, lh + 2) = "" Then '检查是否中奖,已经中奖的不得参与摇奖

    hxRs = hxRs + 1

    SARR(hxRs, 1) = .Cells(HH, lh)

    SARR(hxRs, 2) = .Cells(HH, lh + 1)

    End If

    HH = HH + 1

    Loop

    End With

    ZZ1 = 0: ZZ2 = 0: ZZ3 = 0

    upperbound = hxRs

    lowerbound = 1

    '1-11:中奖人数和候选人数一样时,单独做一个循环

    If ZJRS < hxRs Then GoTo 200

    '一样时

    Do While True

    For ZZ2 = 1 To hxRs

    myName = "TextBox" & ZZ2

    Set xx = Me.Controls(myName)

    xx.Text = SARR(ZZ2, 1) & Chr(10) & Right(SARR(ZZ2, 2), 4)

    Next ZZ2

    DoEvents '释放程序控制权,允许其他事件

    Sleep (5) '延时ms

    DoEvents '释放程序控制权,允许其他事件

    If A = 1 Then GoTo 300

    Loop

    200:

    Do While True

    100:

    SJS = Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

    MYKEY = Trim(SARR(SJS, 1)) & ";" & Trim(Right(SARR(SJS, 2), 4))

    If zjZD.EXISTS(MYKEY) Then

    ZZ1 = ZZ1 + 1

    If ZZ1 > 10000 Then

    MsgBox ("数据异常!!!")

    Exit Sub

    End If

    GoTo 100

    End If

    'ZZ1 = ZZ1 + 1

    'If ZZ1 = 101 Then ZZ1 = 1

    ZZ2 = ZZ2 + 1

    If ZZ2 = ZJRS + 1 Then ZZ2 = 1

    'ZZ3 = ZZ3 + 1

    'If ZZ3 = 4 Then ZZ3 = 1

    'lsARR(ZZ1) = sjs

    myName = "TextBox" & ZZ2

    Set xx = Me.Controls(myName)

    'xx.Text = Left(SARR(SJS, 2), 3) & "XXXX" & Right(SARR(SJS, 2), 4)

    xx.Text = SARR(SJS, 1) & Chr(10) & Right(SARR(SJS, 2), 4)

    zjZD.RemoveAll

    For I = 1 To ZJRS

    myName = "TextBox" & I

    Set xx = Me.Controls(myName)

    If xx.Text <> "" Then

    MYKEY2 = qczf(Left(xx.Text, InStr(xx.Text, Chr(10)) - 1)) & ";" & Right(xx.Text, 4)

    zjZD.Add MYKEY2, I

    End If

    Next I

    'xx.BackColor = RGB(ysARR(ZZ3, 1), ysARR(ZZ3, 2), ysARR(ZZ3, 3))

    DoEvents '释放程序控制权,允许其他事件

    Sleep (5) '延时ms

    DoEvents '释放程序控制权,允许其他事件

    300:

    If A = 1 Then

    For I = 1 To ZJRS

    myName = "TextBox" & I

    Set xx = Me.Controls(myName)

    xx.BackColor = RGB(ysARR(1, 1), ysARR(1, 2), ysARR(1, 3))

    xx.ForeColor = RGB(0, 0, 255)

    xx.Font.Size = 20

    xx.BackStyle = 1

    'ZZ3 = ZZ3 - 1

    'If ZZ3 = 0 Then ZZ3 = 15

    Next I

    Exit Sub

    End If

    Loop

    End Sub

    Private Sub CommandButton5_Click()

    A = 1

    End Sub

    Private Sub CommandButton6_Click() '记录中奖信息

    Dim zjZD

    Dim ZJRS

    Dim zjArr

    zb = ComboBox1.Value '组别

    dj = ComboBox2.Value '等级

    ZJRS = ComboBox3.Value '中奖人数

    Set zjZD = CreateObject("scripting.dictionary")

    '遍历文本框,获取中奖的电话号码

    For I = 1 To ZJRS

    myName = "TextBox" & I

    Set xx = Me.Controls(myName)

    ARR = Split(xx.Text, Chr(10))

    MYTEXT = qczf(ARR(0)) & ";" & qczf(ARR(1))

    zjZD.Add MYTEXT, I

    xx.Text = ""

    xx.BackColor = RGB(255, 255, 255)

    Next I

    Select Case zb

    Case "A"

    lh = 2

    Case "B"

    lh = 5

    Case "C"

    lh = 8

    Case "D"

    lh = 11

    Case "E"

    lh = 14

    Case "F"

    lh = 17

    End Select

    With Sheets("人员清单")

    For I = 3 To .Cells(10000, lh).End(xlUp).Row

    'SARR(SJS, 1) & Chr(10) & Right(SARR(SJS, 2), 4)

    'mytext = Left(.Cells(I, lh + 1).Text, 3) & Right(.Cells(I, lh + 1).Text, 4)

    MYTEXT = qczf(.Cells(I, lh).Text) & ";" & qczf(.Cells(I, lh + 1).Text)

    If zjZD.EXISTS(MYTEXT) Then

    .Cells(I, lh + 2) = dj

    End If

    Next I

    End With

    End Sub

    Private Sub Frame2_Click()

    xxx = 1

    End Sub

    Private Sub UserForm_Initialize()

    Dim xstr(1 To 6) As String '保存每列的数据

    Dim ystr(1 To 3) As String

    Dim zstr(1 To 15) As Integer '

    xstr(1) = "A"

    xstr(2) = "B"

    xstr(3) = "C"

    xstr(4) = "D"

    xstr(5) = "E"

    xstr(6) = "F"

    ComboBox1.List = xstr

    ystr(1) = "一等奖"

    ystr(2) = "二等奖"

    ystr(3) = "三等奖"

    ComboBox2.List = ystr

    For I = 1 To 15

    zstr(I) = I

    Next I

    ComboBox3.List = zstr

    ComboBox3.Value = 15

    End Sub

    5. excel抽奖怎么不重复

    1、新建一个excel表格,把需要抽奖人的人列在A列,以保证每一个人都有一个编码,并且编码是唯一的。

    2、在中奖人下面的空白格内输入公式。公式=INDEX(A:A,RANDBETWEEN(5,14))

    3、公式解释如下:1:先输入一个‘=’号,然后用RANDBETWEEN函数生成一个随机数字,从第5行开始到第14行;在RANDBETWEEN前面在加一个函数INDEX将A列转换成人员姓名;具体操作步骤:在英文输入法状态下,在等于号后面输入RAN就会直接出现函数,选择第二个RANDBETWEEN; 然后在RANDBETWEEN后面的括号里输入5,14;(因为人员序号是5号至14号)然后输入2个括号。(2个括号是因为前面还要加函数)

    4、然后在RANDBETWEEN前面输入in,选择INDEX;

    在INDEX后面的括号后,把鼠标放到A列,选中人员姓名,然后加一个逗号,点击回车即可。(加逗号是为了和后面RANDBETWEEN函数区分开)

    5、所有操作完成之后,按F9就可以滚动抽奖了。

    6. vba抽奖不重复

    用以下方法,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、以此类推,抽出三等奖

    7. excel表格抽奖如何不重复

      如果用EXCEL做,可先选中几个单元格,加上边框,并填入自己想要的文字,编号位置单独占用一个单元格。

      还可把做好的一张多复制几个,编号用公式,使其自动增加,就能一次在一张A4纸上打印多个不同编号的抽奖券了。

      

  • 办公软件excel2010表格操作
  • 用办公软件excel怎样弄第三名