首页 > 解决方案 > 在 Excel VBA 中寻找 Rnd 的良好替代品

问题描述

众所周知,Excel 中的 Rnd 函数很弱,而 Excel 中的 RAND 函数基于 Mersenne 算法,并且要强大得多。我一直在尝试找到一个快速而强大的 Rnd 替代方案,并查看了各种选项,包括使用 Mersenne,但这需要大量代码。

标签: excelvbarandomnumbers

解决方案


另一种选择是从 VBA 调用 Excel RAND 函数,但是一次调用一个会非常慢。但是,Excel365 中的新函数 RANDARRAY 允许 VBA 一次性从 Excel 中调用大量随机数,根据需要使用它们,并在需要时返回更多。这种方法速度快(仅比 Rnd 慢 4 倍,比 Mersenne 代码快)且紧凑 - 代码如下。

我分享这个是希望找到解决这个问题的最佳集体解决方案。

Function RandXL() As Single
  Static Remaining As Long, R() As Variant
  If Remaining = 0 Then 'get more numbers if necessary
    R = Application.WorksheetFunction.RandArray(1000, 1)
    Remaining = 1000
  End If
  RandXL = R(Remaining, 1)
  Remaining = Remaining - 1
End Function

推荐阅读