用EXCEL VBA編寫模擬器可以避免誤操作導(dǎo)致的數(shù)據(jù)刷新

      網(wǎng)友投稿 806 2022-06-04

      *實例*

      抽獎編號:5位

      在前文《EXCEL RAND、RANK、INDEX函數(shù)搞定年會抽獎器》,筆者利用EXCEL的函數(shù)制作了簡單的模擬隨機(jī)抽獎器。

      該方法,具有明顯的缺陷,就是“誤操作會導(dǎo)致數(shù)據(jù)刷新”,本文使用Excel VBA進(jìn)行簡單模擬器編寫:

      用EXCEL VBA編寫模擬器可以避免誤操作導(dǎo)致的數(shù)據(jù)刷新

      更好地避免“誤操作導(dǎo)致的數(shù)據(jù)刷新”

      準(zhǔn)確記錄已經(jīng)中獎的名單

      支持10000條以內(nèi)的“抽獎編號”數(shù)據(jù)添加

      缺陷:抽獎編號只支持3-5位數(shù),其它不能自適應(yīng),需修改代碼

      步驟一:界面設(shè)計

      單元格B:C區(qū)域,輸入“抽獎編號”數(shù)據(jù),并為其分配自增的不重復(fù)編號(1-10003)

      單元格E3:I3區(qū)域,為搖獎過程展示區(qū)域,點擊【開始】按鈕后,E3:I3區(qū)域會持續(xù)閃爍,點擊【結(jié)束】,E3:I3停下,并將搖獎結(jié)果復(fù)制到L列

      單元格L列,為【結(jié)束】后保存之前的搖獎結(jié)果,點擊【重置】按鈕,將清除E3:I3搖獎區(qū)域和L列的數(shù)據(jù)

      步驟二:EXCEL VBA代碼

      ===============開始================

      Dim rollID() As String ? ? ? ?'設(shè)定動態(tài)抽獎編號數(shù)組

      Dim isScroll As Boolean ? ?'設(shè)定控制結(jié)束的布爾值

      Sub rollReward()

      '為動態(tài)數(shù)組確定大小

      Dim a As Integer

      a = Application.WorksheetFunction.Max(Range("B3:B10003").Value)

      '最多在B列支持10000條數(shù)據(jù)(年會抽獎,每次抽1人,足夠了)

      ReDim rollID(1 To a)

      '為抽獎編號賦值

      Dim i As Integer

      For i = 1 To a Step 1

      rollID(i) = Cells(2 + i, 3)

      Next i

      Randomize ?'初始化隨機(jī)數(shù)生成器

      Dim j As Integer

      j = Int(Rnd() * a + 1)

      isScroll = False ?'初始化“控制結(jié)束”標(biāo)記為false

      Dim rollstr As String

      rollstr = rollID(j)

      Range("E3").Value = Mid(rollstr, 1, 1) '抽獎編號第1位數(shù)組,填充在E3單元格

      Range("E3").Interior.Color = RGB(Int(Rnd() * 255), Int(Rnd() * 255), Int(Rnd() * 255)) '隨機(jī)填充顏色

      Range("F3").Value = Mid(rollstr, 2, 1) '抽獎編號第2位數(shù)組,填充在F3單元格

      Range("G3").Value = Mid(rollstr, 3, 1) '抽獎編號第3位數(shù)組,填充在G3單元格

      Range("G3").Interior.Color = RGB(Int(Rnd() * 255), Int(Rnd() * 255), Int(Rnd() * 255)) '隨機(jī)填充顏色

      If Len(rollstr) >= 4 Then

      Range("H3").Value = Mid(rollstr, 4, 1) '抽獎編號第4位數(shù)組,填充在H3單元格

      End If

      If Len(rollstr) >= 5 Then

      Range("I3").Value = Mid(rollstr, 4, 1) '抽獎編號第4位數(shù)組,填充在I3單元格

      Range("I3").Interior.Color = RGB(Int(Rnd() * 255), Int(Rnd() * 255), Int(Rnd() * 255)) '隨機(jī)填充顏色

      End If

      DoEvents '釋放程序控制權(quán)

      Dim b As Integer

      b = Range("K1").Value

      If isScroll = True Then

      b = b + 1

      Range("K1").Value = b

      Range("K" & b + 2).Value = b

      Range("L" & b + 2).Value = rollID(j)

      Exit Sub '判斷控制結(jié)束的標(biāo)記是否為true,是就跳出sub

      End If

      Call rollReward '調(diào)用程序自身,重新生成新的隨機(jī)結(jié)果

      End Sub

      Sub gameover()

      isScroll = True ?'將控制結(jié)束的標(biāo)記置為true

      End Sub

      '重置搖獎區(qū)和結(jié)果展示區(qū)數(shù)據(jù)

      Sub resetGame()

      Range("k1").ClearContents

      Range("k3:K10003").ClearContents

      Range("L3:L10003").ClearContents

      Range("E3:I3").Interior.Color = RGB(255, 255, 255)

      Range("E3:I3").Value = ""

      End Sub

      ===============結(jié)束================

      步驟三:測試3位、4位、3-5位抽獎編號表現(xiàn)

      抽獎編號:3位

      抽獎編號:4位

      抽獎編號:3-5位

      *方法局限*

      只能支持3-5位抽獎編號

      抽獎編號必須與實際參與者一一對應(yīng),且無法一次性抽多人

      無法排除已經(jīng)中獎的編號

      版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。

      上一篇:word文檔頁面背景怎么設(shè)置(Word如何設(shè)置頁面背景)
      下一篇:word文檔怎么設(shè)置打印區(qū)域
      相關(guān)文章
      亚洲精品高清久久| 亚洲区不卡顿区在线观看| heyzo亚洲精品日韩| 亚洲欧美中文日韩视频| 亚洲免费观看在线视频| 亚洲精品福利在线观看| 97se亚洲综合在线| 337p日本欧洲亚洲大胆色噜噜 | 国产亚洲午夜精品| 最新亚洲人成无码网www电影| 亚洲欧美成aⅴ人在线观看| 亚洲熟妇AV一区二区三区宅男| 亚洲va在线va天堂成人| 久久乐国产综合亚洲精品| 亚洲熟妇AV日韩熟妇在线| 久久精品熟女亚洲av麻豆| 在线看亚洲十八禁网站| 国产成人亚洲精品蜜芽影院| 亚洲av午夜精品一区二区三区| 国产精品久久亚洲一区二区| 亚洲视频一区二区| 亚洲精品乱码久久久久久蜜桃不卡 | 亚洲精品**中文毛片| 亚洲日本乱码一区二区在线二产线| 亚洲高清视频在线播放| 亚洲同性男gay网站在线观看| 亚洲免费网站在线观看| 亚洲色最新高清av网站| 狼人大香伊蕉国产WWW亚洲| 亚洲国产精品无码久久久久久曰 | 亚洲真人日本在线| 色久悠悠婷婷综合在线亚洲| 亚洲精品无码久久千人斩| 亚洲AV无码成人网站久久精品大 | 亚洲国产av无码精品| 国产亚洲精久久久久久无码77777| 亚洲无线码在线一区观看| 亚洲不卡av不卡一区二区| 亚洲精品午夜视频| 亚洲人成无码网站在线观看| 亚洲AV中文无码乱人伦|