例如,如果您想生成 3 到 10 之间的完整随机数,则可以使用以下代码。此代码将随机数乘以 7,然后将其加 3,然后四舍五入到小数点零位。假设您想在单元格中显示您的随机数。您可以使用以下代码执行此操作
Sub RandomNumberSheet()
Dim M As Integer
For M = 1 To 5
ActiveSheet.Cells(M, 1) = Round((Rnd(10) * 7) 3, 0)
Next M
End Sub
还有一个名为Randomize的 VBA 函数。可以在Rnd函数之前使用它来将种子值重置为计时器事件或任何给定的参数
Sub RandomNumberV2()
Randomize (10)
MsgBox Round((Rnd() * 7) 3)
End Sub
6/ 生成不重复的随机数
可能会遇到这样一种情况:想生成一系列随机数,但又不想看到任何重复值出现。
可能希望从 1 到 10 的数字之间选择 3 个随机数,但其中 3 个所选数字中的每一个都是唯一的。
有几种可能的解决方案:
RANK.EQ 和 COUNTIF 函数的解决方案:先使用RANDBETWEEN创建随机数,然后使用下一列中的公式对它们进行排名,从而从 1 到 10 的随机排序序列
= RANDBETWEEN ( 1, 10 )
然后,可以使用RANK.EQ函数对它们进行排名,以创建一个从 1 到 10 的序列,该序列是随机排序的
= RANK.EQ ( B2, $B$2:$B$11 ) COUNTIF ( $B$2:B2, B2 ) - 1
用 VBA 解决:注意,公式使用了绝对引用($符号),以便在向下复制公式时公式引用保持固定
还可以使用 VBA 生成一串从 1 到 10 的无重复随机数
Sub RandomNumberNoDuplicates()
Dim M As Integer, Temp As String, RandN As Integer
For M = 1 To 5
Repeat:
RandN = Round((Rnd(10) * 9) 1, 0)
If InStr(Temp, RandN) Then GoTo Repeat
ActiveSheet.Cells(M, 1) = RandN
Temp = Temp & RandN & "|"
Next M
End Sub
代码迭代从 1 到 5 的值,每次生成 1 到 10 之间的随机数。
它测试随机数以检查它是否已经生成。这是通过将成功的数字连接成一个字符串然后搜索该字符串以查看该数字是否已被使用来完成的。
如果已找到,则它使用标签重复返回并重新生成一个新号码。再次测试它尚未使用。如果是新号码,则将其添加到工作表中
动态数组的解决方案:假设要从序列 1 到 10 中返回 5 个数字。您希望每个选择的数字都是唯一的。这可以使用SEQUENCE、SORTBY、RANDARRAY和INDEX函数的组合来完成
=INDEX(
SORTBY(
SEQUENCE(10),
RANDARRAY(10)
),
SEQUENCE(5)
)