【发布时间】:2021-12-10 15:34:38
【问题描述】:
下面有一些代码可以在 Excel 中生成一些随机数:
Sub Macro1()
Dim RA1 As Variant
ReDim RA1(1 To 5)
For i = 1 To 5
Rnd (-1)
Randomize i
For j = 1 To 5
RA1(j) = Rnd
Next j
With Sheets("Sheet1")
.Range(Cells(i, 1), Cells(i, 5)).Value = RA1
End With
Next i
End Sub
此代码基本上生成 5 行,每行 5 个随机数,但它并没有完全按照应有的方式运行。当我在 iMac (2021) 上运行此代码时,每行中的随机数完全相同。但是,这段代码应该生成 5 行不同的随机数。
这就是事情变得更加奇怪的地方。当我在我的 Windows 笔记本电脑上运行此代码时,输出是所希望的 - 也就是说,我确实得到了 5 行不同的随机数。我已经和我的教授谈过这个问题,他也在他的 Windows 电脑上进行了尝试,得到了 5 行不同的随机数。
总而言之,我们基本上不知道为什么我的 iMac 无法运行这段代码。有没有人猜到这里为什么会出现这种差异?例如,我的 iMac 的 Excel 中是否有任何设置阻止我的代码正常运行?
任何解释和解决方案将不胜感激! :)
【问题讨论】:
-
为什么不直接在每个单元格中使用随机函数或随机函数之间的函数?当工作表被告知重新计算时,它们会发生变化,因为它们是易变的。
-
@SolarMike 原因是因为这小部分代码是我需要运行的较大宏的一部分,所以无论如何我都必须使用 VBA 来执行此操作。另一件事是我需要播种我的随机数,这样对于每个 i,我都有不同的随机数,但是任何人运行我的宏时,他们每次都应该得到相同的随机数集。现在的问题是,当我在 iMac 上运行它时,对于每个 i,我都有相同的随机数集,这很奇怪。我只是想知道是否有人知道为什么它在我的 iMac 上运行时没有在 Windows 上正常运行。
-
您是否关闭了其他宏之一中的计算?
-
@SolarMike 是的。因为这个宏运行 1000 个 i 值,所以我在实际的完整宏中将计算设置为手动,但是我在每个相关点都使用
.Calculate吗?另外,如果我可以补充的话,没有“其他宏之一”。实际上只有一个。如果手动计算是个问题,那仍然不能解释为什么确切的代码在 Windows 上运行得很好? -
好吧,您显示的代码中没有 .Calculate 。而且您可能想在这里为“选项显式”做一些研究......
标签: excel vba macos random random-seed