[有很多種解決問題的方法,這邊只是提供一個我知道的,並不代表是最佳的]
[使用函數]
A.RANDBETWEEN(XXX,XXX)= RANDBETWEEN=(最小值,最大值)
函數說明:在最小值與最大值間隨機號碼產生一個號碼
B.COUNTIF(XXX,XXX)= COUNTIF(範圍,目標)
函數說明:計算在一個範圍內,目標值得個數
[範例說明]
1.在活頁簿內製作如下的格式
2. A2至F2的儲存格公式全部均下
=RANDBETWEEN(1,48) ‘從1至48號隨機產生一個數字。
3.A3至F3的儲存格公式,分別如下所示
A3儲存格 =COUNTIF($A$2:$F$2,A2) ‘計算從範圍 A2到F2 中,與A2儲存格相同的號碼有幾個。
B3儲存格 =COUNTIF($A$2:$F$2,B2) ‘計算從範圍 A2到F2 中,與B2儲存格相同的號碼有幾個。
C3儲存格 =COUNTIF($A$2:$F$2,C2) ‘計算從範圍 A2到F2 中,與C2儲存格相同的號碼有幾個。
D3儲存格 =COUNTIF($A$2:$F$2,D2) ‘計算從範圍 A2到F2 中,與D2儲存格相同的號碼有幾個。
E3儲存格 =COUNTIF($A$2:$F$2,E2) ‘計算從範圍 A2到F2 中,與E2儲存格相同的號碼有幾個。
F3儲存格 =COUNTIF($A$2:$F$2,F2) ‘計算從範圍 A2到F2 中,與F2儲存格相同的號碼有幾個。
4.於VBAProject內插入一個模組
5.模組內的程式碼如下
=========================================================
Sub 抽獎()
Calculate ‘執行計算
For I = 6 To 37 ‘I要設定為6到37,因為A3~F3是計算A2~F2的數字是否有重複出現,若沒有重複的數字A3~F3的加總一定等於6,當然如果A2~F2出現的數字都一樣,最大也是6*6=36,所以要設定37,因為如果你設定36,如果剛好是出現加總36,迴圈就不會執行,所以要設定比36大的數字,讓他如果發生重覆是不會執行停止的,因為I永遠不會到37只會到36,除非你指定他到37。
I = Application.WorksheetFunction.Sum(Range("A3:F3")) ‘I=A3至F3的加總
If I > 7 Then ‘因為我們是取六個數字,如果大於七就表示有一個重覆
Calculate ‘因為I大於七所以我們要重新在執行一次計算
Else ‘如果沒有大於七就表示是I等於六
I = 37 ‘此時強制讓I=37 跳出迴圈
End If
Next I
End Sub
=========================================================
6.於工作頁上隨意新增一個圖形,並將其指定剛剛設定新增好的模組巨集 [抽獎] 。
圖形內可以任意取名,在此處就取名為 [抽獎]
7.按下抽獎鈕就會自動產生出六個不同號碼了
[進階運用]
如果我今天想要1~42或5到72,每次都要去重下A2~F2的公式很麻煩,請問要如何自由設定號碼的區間,而不用改公式呢?
1.在C8至D9這個範圍加入如下紅框的資料。
2.修改A2到F2的公式均修改為,=RANDBETWEEN($C$9,$D$9) ‘最小值參照C9欄位,最大值參照D9欄位,隨機出現一個數字
3.修改巨集內的程式碼
新增四行指令如下紅字所示(黑字的部份沒有進行修改所以請參閱之前的說明),主要是要防止如果有人將最小值輸入1最大值輸入5,因為我們是取六個隨機數字,所以這樣絕對會有重覆的數字出現,故必須將防呆寫入巨集,當有人輸入最小值與最大值相減小於5時,巨集不會啟動,這樣就可以避免巨集陷入無限迴圈,導致Excel停止回應的情形。
=========================================================
Sub 抽獎()
If Range("D9") - Range("C9") < 5 Then ’如果最大值-最小值小於5就出現對資訊視窗
MsgBox ("您輸入的區間範圍,最大值-最小值必須大於或等於五,才可進行抽獎") ‘跳出資訊視窗,提醒使用者相關訊息。並直接跳至最外層的End IF 結束此巨集
Else
Calculate
For I = 6 To 37
I = Application.WorksheetFunction.Sum(Range("A3:F3"))
If I > 6 Then
Calculate
Else
I = 37
End If
Next I
End If
End Sub
=========================================================
留言列表