用于抽奖和重复的Excel VBA代码

问题描述 投票:0回答:1

我想在 Excel 中抽奖,我可以在 1-1000 之间抽取大约 30 个随机数字,并且这 30 个数字不重复。

我不知道如何检查数组是否有重复项,如果有则再次运行代码。

我目前使用下面的 VBA 代码来生成随机数/中奖者。我不认为这是最有效的方法,但这就是我得到的......:)

Public Sub CommandButton1_Click()
    Dim MIN, MAX, OUT, i
    Static a, n, z
    MIN = Array(1, 1, 1, 1): MAX = Array(10, 10, 10, 10): OUT = Array("Q1", "Q2", "Q3", "Q4")
    z = UBound(MIN)
    If Not IsArray(n) Then ReDim a(z): ReDim n(z)
    For i = 0 To z
        If n(i) = 0 Then Reset a(i), n(i), MIN(i), MAX(i)
        Range(OUT(i)) = a(i)(n(i)): n(i) = n(i) - 1
    Next
End Sub

Private Sub Reset(a, n, MIN, MAX)
    Dim i, j
    Randomize: n = MAX - MIN + 1: ReDim a(1 To n)
    For i = 1 To n
        j = Rnd * (i - 1) + 1: a(i) = a(j): a(j) = i - 1 + MIN
    Next
End Sub

如果您可以帮助我或知道更好的编码方法,请嗯! :)

谢谢! 奥斯卡

arrays vba loops random duplicates
1个回答
0
投票

如果您有 Excel 365,您可以使用 VBA、

Evaluate
和公式:

Sub writeRandomNumbers(rgTarget As Range)
rgTarget.Resize(30).Value = Evaluate("=TAKE(SORTBY(SEQUENCE(1000),RANDARRAY(1000)),30)")
End Sub

你可以这样称呼这个子:

Public Sub CommandButton1_Click()
writeRandomNumbers Range(1, 1)
End Sub

但显然您也可以在表格上使用公式本身。 但每当计算另一个公式时它就会更新。

每当用户单击按钮时,都会使用 VBA 代码将随机 values 写入工作表。

© www.soinside.com 2019 - 2024. All rights reserved.