填充随机数字的数组总和在Excel VBA

我正在尝试为其创build一个抽样工具

我需要select0到3000之间的随机生成的数字,以500的倍数来表示,它们的总和是固定的数字,在12个时隙中表示10000

至于我需要运行多个迭代大约100000到1000000(还没有决定。

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

我正在做一些非常可怕的错误,下面的代码无法找出哪里…帮助表示赞赏

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。

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

不要把它当作一个数组来填充,而应该把它看作是一个弹珠台或者高尔顿板,用20个球弹跳,最后到达底部的箱子。 为什么20? 因为你想以500的增量加10000,并且把10000/500 = 20当作一个球。

现在程序可以线性运行。 你不要随机分配这些数字,你随机select球落入的12个插槽中的哪一个。 然后你乘以500,每个槽中有多less个球,你的总和将是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 

这足以解决你的问题,还是你需要更多?