Board logo

標題: 想運用Excel做個抽獎 [打印本頁]

作者: K_Wing    時間: 2014-12-19 16:52     標題: 想運用Excel做個抽獎

時近聖誕新年
公司想搞個抽獎活動
形式大致類似Bango
會使用投影機將畫面放大到螢幕上

避免抽紙仔的人胡亂報數(無心之失報錯)
所以想將1-100的編號
運用Excel 隨機顯示出來
顯示過的編號不會再次被抽中

首先會在A列列出1-100的數字
然後在B列顯示
同事們嘗試過下以下公式
=INDEX(A1:A30,INT(30*RAND()+1))
不知何故每輸入一次
原先已出現過的編號隨即變了另一個數字
假說B1輸入公式後,出現的數字是38
當在B2再輸入這條公式,B2再顯示出89
但B1的數字隨即變了65

問題:
公式有錯誤嗎?
有沒有其他公式?
同樣可以簡單地作出抽獎
作者: hugh0620    時間: 2014-12-20 13:01

回復 1# K_Wing
      
    用公式的話,可能會有問題,
    抽獎本身就是隨機的,所以你同事用亂數的方式是對的方向,
    但是,就我使用亂數的情況,只要儲存格有改變到,該亂數就會被執行,
    因此,我只有用vba的方式來處理,請下載附擋,應該可以符合你的需求。
    [attach]19870[/attach]
作者: K_Wing    時間: 2014-12-20 18:34

回復 2# hugh0620
^^~
非常感謝兄弟幫忙
是這樣的模式了
可是按鈕放得過高
如果可以調低至F35的位置
就最好了
作者: hugh0620    時間: 2014-12-21 00:36

回復 3# K_Wing

   操作圖示,請自己試著移動看看,才能增加你的EXCEL能力。
    [attach]19873[/attach]
    [attach]19874[/attach]
作者: K_Wing    時間: 2014-12-21 22:15

回復 4# hugh0620
^^~成功了
感謝指導
另想問問若想
若我想以圖片內的情況顯示抽出號碼
比如話移位後的21至100
旁邊的空格已沒法顯示號碼
可以怎樣做呢
[attach]19883[/attach]
另大空格的"37"
除了使用公式"=B2"
還可以怎樣使它自動顯示
作者: hugh0620    時間: 2014-12-22 08:26

本帖最後由 hugh0620 於 2014-12-22 08:30 編輯

回復 5# K_Wing


    B1改成P6
    B2改成K14
    另外要把每一排依20個人來使用,要再加工一下。
作者: K_Wing    時間: 2014-12-22 08:33

回復 6# hugh0620
萬二分感謝
問題已圓滿解決:)
作者: hugh0620    時間: 2014-12-22 09:43

本帖最後由 hugh0620 於 2014-12-22 09:45 編輯

回復 5# K_Wing
1. 將舊的程式碼全部刪除
2.將下面的程式碼全部貼上,應該就是你要的結果

我用的是比較直接邏輯性的判斷來完成,所以會比較長,
沒太多時間簡化程式碼,其他大大應該有更簡便的方式。
  1. Sub 產生抽獎次數()
  2. Dim A As Integer

  3. 'A = Range("B1")   '抽獎人數
  4. 'Range("B2").ClearContents
  5. 'Range("A5:B65536").ClearContents '清除舊的次數

  6. A = Range("P6")       '抽獎人數
  7. B = 20                '20人一排
  8. C = A / B             '整數有多少排(ex. C=100/20=5)


  9. If C = Int(C) Then
  10.    D = C              '當C是整數的時候,D等於C幾排,迴圈要跑的次數
  11. Else
  12.    D = Int(C) + 1     '當C不是整數的時候,D等於C幾排+1,迴圈要跑的次數
  13. End If
  14.     Range("A4").Select
  15.     Range(Selection, Selection.End(xlToRight)).Select
  16.     Range(Selection, Selection.End(xlDown)).ClearContents

  17. P = 1
  18. For J = 0 To D - 1
  19.       Cells(4, J * 2 + 1) = "工號(姓名)"
  20.       Cells(4, J * 2 + 2) = "抽中號碼"
  21.       For I = 1 To B   '產生編號
  22.           Cells(I + 4, J * 2 + 1) = P
  23.           P = P + 1
  24.       Next I
  25. Next J

  26. End Sub
  27. Sub 一次抽一個編號()

  28. A = Range("P6")       '抽獎人數
  29. B = 20                '20人一排
  30. C = A / B             '整數有多少排(ex. C=100/20=5)
  31. If C = Int(C) Then
  32.    D = C              '當C是整數的時候,D等於C幾排,迴圈要跑的次數
  33. Else
  34.    D = Int(C) + 1     '當C不是整數的時候,D等於C幾排+1,迴圈要跑的次數
  35. End If

  36.         '==== 確定號碼不會重複==========
  37. 1
  38.         K = Int(Round(Rnd(), 3) * 100)
  39.         If K > A Then
  40.           GoTo 1
  41.         End If
  42.         
  43.         For J = 0 To D - 1
  44.               For I = 1 To B   '產生編號
  45.                   If K = Cells(I + 4, J * 2 + 2) Then
  46.                      GoTo 1
  47.                   End If
  48.               Next I
  49.         Next J
  50.         '==== 確定號碼不會重複==========
  51.         
  52.         P = Application.CountA(Range("B5:B24"), Range("D5:D24"), Range("F5:F24"), Range("H5:H24"), Range("J5:J24"))
  53.         If P < 20 Then
  54.              Range("K14") = K
  55.              If P = 0 Then
  56.                 Cells(4, 2).Offset(1, 0) = K
  57.              Else
  58.                 Cells(4, 2).End(xlDown).Offset(1, 0) = K
  59.              End If
  60.         ElseIf P >= 20 And P < 40 Then
  61.              Range("K14") = K
  62.              If P = 20 Then
  63.                 Cells(4, 4).Offset(1, 0) = K
  64.              Else
  65.                 Cells(4, 4).End(xlDown).Offset(1, 0) = K
  66.              End If
  67.         ElseIf P >= 40 And P < 60 Then
  68.              Range("K14") = K
  69.              If P = 40 Then
  70.                 Cells(4, 6).Offset(1, 0) = K
  71.              Else
  72.                 Cells(4, 6).End(xlDown).Offset(1, 0) = K
  73.              End If
  74.         ElseIf P >= 60 And P < 80 Then
  75.              Range("K14") = K
  76.              If P = 60 Then
  77.                 Cells(4, 8).Offset(1, 0) = K
  78.              Else
  79.                 Cells(4, 8).End(xlDown).Offset(1, 0) = K
  80.              End If
  81.         ElseIf P >= 80 And P < 100 Then
  82.               Range("K14") = K
  83.              If P = 80 Then
  84.                 Cells(4, 10).Offset(1, 0) = K
  85.              Else
  86.                 Cells(4, 10).End(xlDown).Offset(1, 0) = K
  87.              End If
  88.         ElseIf P >= 100 Then
  89.              MsgBox "已完抽獎"
  90.              GoTo 2
  91.         End If
  92. 2

  93. End Sub
複製代碼

作者: K_Wing    時間: 2014-12-22 10:36

回復  K_Wing
1. 將舊的程式碼全部刪除
2.將下面的程式碼全部貼上,應該就是你要的結果

我用的是比較 ...
hugh0620 發表於 2014-12-22 09:43

非常感謝一再講解
因不同部門有著不同的意見
總不能每次出現新意見後又再上來提問

負責的同事已修改為公式
將原有21-100的文字全改為白色
讓這系列的儲存格變成空白
然後在新的位置貼上"=原有儲存格的公式"再下拉
暫時來說總算解決了問題

再次感謝兄弟的熱心幫忙
謝謝




歡迎光臨 麻辣家族討論版版 (http://forum.twbts.com/)