用EXCEL VBA編寫模擬器可以避免誤操作導致的數據刷新(用excel怎么做曲線圖)

      網友投稿 944 2022-06-01

      *實例*

      抽獎編號:5位

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

      用EXCEL VBA編寫模擬器可以避免誤操作導致的數據刷新(用excel怎么做曲線圖)

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

      更好地避免“誤操作導致的數據刷新”

      準確記錄已經中獎的名單

      支持10000條以內的“抽獎編號”數據添加

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

      步驟一:界面設計

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

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

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

      步驟二:EXCEL VBA代碼

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

      Dim rollID() As String ? ? ? ?'設定動態抽獎編號數組

      Dim isScroll As Boolean ? ?'設定控制結束的布爾值

      Sub rollReward()

      '為動態數組確定大小

      Dim a As Integer

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

      '最多在B列支持10000條數據(年會抽獎,每次抽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 ?'初始化隨機數生成器

      Dim j As Integer

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

      isScroll = False ?'初始化“控制結束”標記為false

      Dim rollstr As String

      rollstr = rollID(j)

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

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

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

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

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

      If Len(rollstr) >= 4 Then

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

      End If

      If Len(rollstr) >= 5 Then

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

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

      End If

      DoEvents '釋放程序控制權

      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 '判斷控制結束的標記是否為true,是就跳出sub

      End If

      Call rollReward '調用程序自身,重新生成新的隨機結果

      End Sub

      Sub gameover()

      isScroll = True ?'將控制結束的標記置為true

      End Sub

      '重置搖獎區和結果展示區數據

      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

      ===============結束================

      步驟三:測試3位、4位、3-5位抽獎編號表現

      抽獎編號:3位

      抽獎編號:4位

      抽獎編號:3-5位

      *方法局限*

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

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

      無法排除已經中獎的編號

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:EXCEL 數據透視表函數 自動生成一組公式 回車可以得到正確結果(excel函數公式大全)
      下一篇:運用EXCEL RAND RANK INDEX函數制作公司年會抽獎器(運用excel做某一種統計分析)
      相關文章
      亚洲国产综合自在线另类| 国产精品亚洲片在线观看不卡| 亚洲视频在线精品| 亚洲人成网站免费播放| 亚洲人成网男女大片在线播放| 亚洲视频在线观看| 亚洲va中文字幕无码久久不卡| 亚洲色成人WWW永久网站| 久久久久亚洲精品男人的天堂| 亚洲A∨精品一区二区三区| 在线观看亚洲免费| 亚洲成a人一区二区三区| 亚洲高清视频一视频二视频三| 亚洲成a人片在线播放| 亚洲v国产v天堂a无码久久| 亚洲精品一级无码中文字幕| 亚洲午夜爱爱香蕉片| 亚洲免费人成在线视频观看| 好看的亚洲黄色经典| 亚洲国产精品嫩草影院在线观看| 亚洲国产婷婷六月丁香| 亚洲AV永久无码精品一百度影院| 亚洲AV无码一区二区乱子伦| 亚洲AV乱码一区二区三区林ゆな| 亚洲精品视频在线| 亚洲熟妇av一区| 亚洲1234区乱码| 亚洲av中文无码乱人伦在线观看| 国产成人精品久久亚洲高清不卡 | 久久精品国产亚洲av麻豆色欲 | 亚洲AV无码成人精品区大在线| 亚洲äv永久无码精品天堂久久| 无码不卡亚洲成?人片| 亚洲中文字幕视频国产| 国产精品亚洲аv无码播放| 亚洲国产精品久久久久婷婷老年 | 亚洲国产婷婷综合在线精品| 国产亚洲av人片在线观看| 亚洲AV永久无码区成人网站| 亚洲欧洲日韩国产| 国产亚洲玖玖玖在线观看|