名医指导 足不出户寻医问药
聚焦健康 权威的健康资讯
您的位置: 首页> 正文

EXCEL抽奖如何多次抽奖不重复excel抽奖怎么不重复

发布网友 发布时间:2024-05-14 16:03

我来回答

1个回答

热心网友 时间:2024-05-16 04:52

用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
  抽取不重复的很好办到,比如抽取后单独做标记、去除等等办法。但最关键的部分恰恰是被你忽略的:随机性。也就是你需要如何来实现你随机抽取这个过程。抽号这个你可以跑号、随机数这些都可以。
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com
五丁开山的传说 库尔德语专业介绍 健身之后全身都在疼,怎么缓解 莆田供电打印清单需要什么材料 天籁出风口不出风什么原因? 已知一点光源S位于凸透镜一倍焦距内,成一虚像S',则在如图所示的光路图... 乐扣杯子的柠檬片放了一个礼拜,今天打开来柠檬片上都是一粒粒黑色的 好... 去年在朋友推荐下买了"安阳惠民保”,如果住院的话报销比例是多少? 英语COOK怎样组动词? 养 黄颡鱼有发展吗?好养吗? 黄颡鱼好养吗? 光泽黄颡鱼的养殖难度大吗 牧马人档位怎么切换挂? 请问一下.iphone放在电脑音箱旁边会有什么危害吗? QQ炫舞名字字体加粗 玲珑塔的故事是什么? 3月12植树节是纪念谁? 优珍公司是什么时候成立的? 喜仁堂有哪些合作案例或合作伙伴? 绿豆汤为什么熬出来发红? ...检查分为巡查和检查两种情形。下列关于灭火器巡查和检查说法中,不正... 如何检查二氧化碳灭火器是否合格 皖:dn9488这个车牌好不好 word写文章的正规格式word写文章的正规格式是什么 标识牌设计是什么行业 深圳西利到沙田镇有多远 深圳南都关离西利有多远? 何铁成和何育新是什么关系 1英里等于5280英尺,这是多少进制的??为什么不是整数?之间还有单位吗_百... 请问在手机上怎么使用金山文档? 买椟还珠告诉了我们什么? 俗语“早上种瓜,尽开空花”,是真的吗?为什么民间会这么说呢?_百度知 ... 百变小樱的妈妈的名字 ...科学发展新路子”主题教育活动的实施意见的工作要求 中被称为"智多星"的实际谁 b站网页版在哪里 请问谁知道在QQ里按住ALT在打数字几能打出《元旦快乐》4个字 5月21日左右温哥华的天气咋样?要带些什么衣服过去呢? 家里的白米饭不好吃怎么办? 取保候审金是打到犯罪嫌疑人的账户冻结公安局取出吗? 去取保金公安局说给打款,可能吗? 荷风四面亭上的对联“四壁荷花三面柳,半潭秋水一房山”是谁书写的?_百... 爱的供养原唱何晟铭 谁有[梦奇字幕组]的假面骑士exaid全集? 求梦奇字幕组《假面骑士drive》720p 谁有【梦奇字幕组】★假面骑士Drive&手里剑战队忍忍者★[1小时SP... 月子期间养腰可以吃哪些食物? 坐月子吃什么补血又催乳? 富含胶原蛋白的食品有哪些? 海参烧蹄筋有哪些营养价值?口感如何? ...进价25%的利润,那么如果按原价打9折出售,利润率是多少? 每个篮球销售100元一共能赚多少元呢原来是85元 高铁轨道为什么要铺碎石头 珠海华发商都到中山深湾市场坐那路车 带“我们”和“"我""你""”的歌词,越多越好.重复不算. 请问这首歌叫什么名字?谢谢了!歌词:"...让我们一起来唱这首老歌,也许歌... 得尚门窗产品怎么样? 最近想换个美观实用的门窗,哪个十大门窗品牌的设计出众? 断桥铝门窗什么品牌好 我的乔丹四代篮球鞋在天猫上买的47的脚,打折后289元,同学说是假的。到 ... 生日的愿望是不是真的可以成真的 孩子有高压行为该怎么办? 2006中国国际地铁及地下轨道交通展览会 耐克男女款鞋的不同有哪些地方? 荣和山水绿城到广西规划管怎么走 荣和山水绿城交通方便吗?应该怎么过去? 九峰动物园的老虎表演怎么没了 中诚医药属于国企吗 简单的分数乘除计算题 600道 , 尽量不要简便计算的,有一点没事!_百度... 脸色蜡黄因为贫血吗 为研究化学反应前后反应物与生成物之间的质量关系,做了下列三个实验.实... 某同学欲研究化学反应前后物质总质量的关系,进行如图所示的实验:在底部... 为研究化学反应前后反应物与生成物之问的质量关系,三位同学分别做了如下... 为什么2022年单招调档线过了,填了调剂还是没被录取? ...快递快件从滁州12点40出发的,到明光要多长时间,你 地平线渴望狩猎bug 独立柱基础按贵州04定额多少钱一立方 贵州04定额人工工资怎么取费,按多少钱一天计算??? 贵州04定额石方人工开挖孔装按市调差多少钱一立方怎么算 苹果十五手机上的黑框怎么去掉呢? 去普陀山要注意哪些事项 孙铭徽怎么没有上场 下列与现代通讯科技有关的说法错误的是 易鑫车贷人工客服热线 十二进制37换成十进制 您好,非婚生子女上户,派出所要求孩子父亲带身份证户口本签字_百度知 ... 湖南汇智液压股份有限公司怎么样? 湖南汇智国茶林产工业有限公司怎么样? 湖南中广汇智信息技术有限公司怎么样? 台青看到比亚迪仰望u8目不转睛
  • 焦点

最新推荐

猜你喜欢

热门推荐