gpt4 book ai didi

vba - 在 VBA 中重复随机变量

转载 作者:行者123 更新时间:2023-12-04 13:24:58 29 4
gpt4 key购买 nike

如何使用 randomize 和 rnd 来获取随机变量的重复列表?

通过重复列表,我的意思是如果您运行一个循环来获取 10 个随机数,则列表中的每个随机数都将是唯一的。此外,如果您再次运行此序列,您将获得与之前相同的 10 个随机数。

最佳答案

来自微软自己的口中:

To repeat sequences of random numbers, call Rnd with a negative argument immediately before using Randomize with a numeric argument.



here详情。

全段:

评论
Rnd函数返回小于 1 但大于或等于 0 的值。

number 的值决定了如何 Rnd生成一个随机数:

对于任何给定的初始种子,都会生成相同的数字序列,因为每次连续调用 Rnd函数使用前一个数字作为序列中下一个数字的种子。

调用前 Rnd ,使用 Randomize不带参数的语句使用基于系统计时器的种子初始化随机数生成器。

要生成给定范围内的随机整数,请使用以下公式:
Int((upperbound - lowerbound + 1) * Rnd + lowerbound)

此处,upperbound 是范围内的最大数,lowerbound 是范围内的最小数。

备注 要重复随机数序列,请在使用 Randomize 之前立即使用负参数调用 Rnd。带有数字参数。使用具有相同数字值的 Randomize 不会重复之前的序列。

举例来说,如果将此代码放入 Excel,则每次运行它时都会生成不同的数字:
Sub xx()
' x = Rnd(-1) '
Randomize 10
MsgBox (Rnd)
End Sub

但是,如果您取消注释 x = Rnd(-1)行,它在每次运行时生成相同的数字。

请注意,您必须做两件事。调用 Rnd以否定论据并调用 Randomize带有特定的论据。改变其中任何一个都会给你一个不同的种子(因此顺序)。

编辑:

回复您的评论:

By repeating sequence, I mean if you run a loop to get 10 random numbers, each random number in the list will be unique. In addition, if you were to run this sequence again, you would get the same 10 random numbers as before. Does what I'm describing make sense?



您现在还需要一条信息。您要求的不是随机数,而是改组算法。我会向您推荐我之前给出的有关如何执行此操作的答案 here .您需要做的就是将改组算法与上面详述的种子设置相结合,您将拥有可重复的、独特的序列。

这里有一些代码可以显示它的实际效果。此子程序的每次运行都返回序列 4 1 5 6 2 3 7 10 9 8所以我认为这就是你所追求的,一个可重复的、“随机”的、独特的序列。如果您希望能够生成不同的序列(但仍以可重复的方式),您只需更改赋予 Randomize 的值。 .
Option Explicit
Option Base 1

Sub xx()
Dim x(10) As Integer
Dim xc As Integer
Dim xp As Integer
Dim i As Integer
Dim s As String

For i = 1 To 10
x(i) = i
Next
xc = 10

i = Rnd(-1)
Randomize 1

s = "Values:"
For i = 1 To 10
xp = Int(Rnd * xc) + 1
s = s & " " & CStr(x(xp))
x(xp) = x(xc)
xc = xc - 1
Next i

MsgBox (s)
End Sub

关于vba - 在 VBA 中重复随机变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884972/

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