gpt4 book ai didi

excel - 从一维数组中选择随机项不重复

转载 作者:行者123 更新时间:2023-12-04 15:19:05 25 4
gpt4 key购买 nike

我正在尝试使用此代码从一维数组中选择随机项

Sub Select_Random_Item_From_1D_Array()
Dim arr(), x As Long
arr = Array("Good", "Very Good", "Excellent")
Randomize
x = Int((UBound(arr) + 1) * Rnd + 1)
Debug.Print arr(x - 1)
End Sub

我怎样才能防止重复?我的意思是我需要随机选择所有项目而不重复。如果选择了所有项目,则重置该过程。只是我需要随机选择所有项目

最佳答案

这是返回一个数组的随机排列的简单方法,该排列恰好需要 n 个步骤,其中 n 是数组中的条目数。

 Dim arr(), x As Long, r As Long
arr = Array("Good", "Very Good", "Excellent")
x = UBound(arr)
While x >= 0
r = Int(Rnd * x)
Debug.Print arr(r)
arr(r) = arr(x)
x = x - 1
Wend

从 (0,..,x) 中随机选择 r 并打印出 arr(r)。然后将 r 处的条目替换为 x 处的条目,并再次选择,但这次是从 (0,..,x-1) 开始,重复直到 >x=0

这里有一个更完整的版本,可让您一次阅读一个条目:

将它放在一个模块中:

Public rarr(), ctr As Integer, arr()

Sub init()
With Cells
.Clear
.ColumnWidth = 10
End With
Dim x As Long, r As Long
arr = Array("Very Poor", "Poor", "Average", "Good", "Very Good", "Excellent")
x = UBound(arr)
ReDim rarr(0 To x)
Randomize
While x >= 0
r = Int(Rnd * x)
rarr(x) = arr(r)
arr(r) = arr(x)
x = x - 1
Wend
[a1:f1] = rarr
ctr = 0
End Sub

Sub Button1_Click()
Cells(ctr + 3, 1) = rarr(ctr)
ctr = ctr + 1
If ctr > UBound(rarr) Then init
End Sub

并在工作表中添加两个按钮。将一个指向 init,将另一个指向 Button1_Click。首先单击 init,然后按 Button1 一次显示一个随机且唯一的条目。

关于excel - 从一维数组中选择随机项不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63743312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com