【问题标题】:Excel VBA. Does this macro produce random permutations?Excel VBA。这个宏会产生随机排列吗?
【发布时间】:2012-11-05 08:24:16
【问题描述】:

我现在依靠这个宏来生成随机序列,我只是想检查我得到的序列是否确实是随机的(嗯,显然计算机可以做到的最好的随机序列)。

Sub Random()
For x = 1 To Selection.Rows.Count
   r = Int(Rnd(1) * (Selection.Rows.Count) + 1)
   For z = 1 To Selection.Columns.Count
       y = Selection.Cells(x, z).Formula
       Selection.Cells(x, z).Formula = Selection.Cells(r, z).Formula
       Selection.Cells(r, z).Formula = y
   Next z
Next x
End Sub

很抱歉提出了一个非常无聊的问题,但我需要对此保持冷静。

非常感谢

【问题讨论】:

  • 附加查询 - 您的选择中有什么?我看不出你是怎么做到的?如果速度是一个问题,一个变体数组会比你的范围写入更快

标签: excel vba


【解决方案1】:

For 行之后添加此行

Randomize Timer

这将确保您永远不会再次获得相同的随机数,因为它使用计时器作为生成数字随机性的种子。

你的代码应该是

Sub Random()
For x = 1 To Selection.Rows.Count
   Randomize Timer
   r = Int(Rnd(1) * (Selection.Rows.Count) + 1)
   For z = 1 To Selection.Columns.Count

       y = Selection.Cells(x, z).Formula
       Selection.Cells(x, z).Formula = Selection.Cells(r, z).Formula
       Selection.Cells(r, z).Formula = y
   Next z
Next x
End Sub

【讨论】:

  • 同意使用Randomize更改种子。虽然来自 xl-2010 帮助Randomize uses the return value from the Timer function as the new seed value.
  • 正确。 Randomize 使用一个数字来初始化 Rnd 函数随机数生成器,给它一个新的种子值。如果省略 number,则系统计时器返回的值将用作新的种子值。如果不使用 Randomize,则 Rnd 函数(不带参数)在第一次调用时使用相同的数字作为种子,然后使用最后生成的数字作为种子值。 docs.microsoft.com/en-us/office/vba/language/reference/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-12
  • 2018-07-22
  • 1970-01-01
  • 2011-10-04
相关资源
最近更新 更多