excel - 在 Excel VBA 中寻找 Rnd 的良好替代品
问题描述
众所周知,Excel 中的 Rnd 函数很弱,而 Excel 中的 RAND 函数基于 Mersenne 算法,并且要强大得多。我一直在尝试找到一个快速而强大的 Rnd 替代方案,并查看了各种选项,包括使用 Mersenne,但这需要大量代码。
解决方案
另一种选择是从 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
推荐阅读
- vim - 如何在vim的多个文件中注释掉以某种特定模式开始/结束的代码块?
- c# - 如何在 MVC 中使用多重路由
- ruby-on-rails - :require_no_authentication 过滤器重置用户密码时
- spring-boot - 如何修复连接 Spring Boot 指标和 Cloudwatch 的 InvalidAlgorithmParameterException
- python - 切换到node2vec方法一个bpmn文件
- gatsby - 将自定义 Modernizr 构建添加到 Gatsby 站点
- python - 使用 Tweepy 提取推文一周
- php - 试图找出更多关于 XMLHttpRequest 的细节
- sql - 如何基于多列添加条件计数
- reactjs - 可以在 componentWillReceiveProps react 方法中比较两个数组吗?