gpt4 book ai didi

arrays - 填充随机数数组以在Excel vba中求和

转载 作者:行者123 更新时间:2023-12-03 02:59:55 27 4
gpt4 key购买 nike

我正在尝试创建一个采样工具

我需要以 500 的倍数选择 0 到 3000 之间随机生成的数字,这样它们的总和就是一个固定数字,比如 12 个槽中的 10000

除此之外,我需要运行大约 100000 到 1000000 次的多次迭代(尚未决定。

我的方法是创建一个二维数组,设置一个约束来验证迭代的总和,并且只有当条件为真时才将其输入到最终的数据样本中。

我用下面的代码犯了一些非常可怕的错误,无法弄清楚在哪里......感谢帮助

Public Sub Generatenums()
Dim GRP() As Long, Random() As Long
Dim RandomTotal As Long, t As Long, w As Long, i As Long, j As Long

ReDim GRP(1 To 100, 1 To 12)
ReDim Random(1 To 12)

For i = 1 To 100
For j = 1 To 12
Random(j) = Int(Rnd() * 7) * 500
RandomTotal = RandomTotal + Random(j)
Next j

If RandomTotal = 10000 Then
For k = 1 To 12
GRP(i, k) = Random(k)
Next k
End If
Next i

Range("A1").Select
For t = 1 To 100
For w = 1 To 12
Cells(t, w).Value = GRP(t, w)
Next w
Next t
End Sub

最佳答案

Fantom,欢迎来到 SO。

评论者是对的:这将需要很长时间才能运行。

不要将其视为一个要填充一定总和的数组,而是将其视为弹珠机或 Galton Board 20 个球四处弹跳,最终落入底部的垃圾箱中。为什么是20?因为您希望以 500 为增量得到 10000 的总和,并将 10000/500 = 20 视为一个球。

现在程序可以在线性时间内运行了。你不是随机化总和,而是随机化球将落入 12 个槽中的哪一个。然后将每个槽中的球数乘以 500,总和将始终为 10000。

其中一个循环如下所示:

For i = 1 To 20
x = Rnd() * 12 + 1
If x > 12 Then x = 12
If x < 1 Then x = 1
bin(x) = bin(x) + 1
Next i

这足以解决您的问题吗?还是还需要更多?

关于arrays - 填充随机数数组以在Excel vba中求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11142368/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com