EXCEL 随机数如何限定范围,并让其总和等于一个定值?

2014-09-17 10:41:14 +08:00
 baocool
需要10个随机数,总和为100,每个数在90和110的范围内

目前使用
Sub a()
Range("b2:b11") = ""
For i = 2 To 10
Do Until WorksheetFunction.CountIf(Range("b:b"), Range("b" & i)) = 1 _
And [b1] - WorksheetFunction.Sum(Range("b2:b" & i)) >= [E2] * (11 - i) _
And [b1] - WorksheetFunction.Sum(Range("b2:b" & i)) <= [E3] * (11 - i)
Range("b" & i) = Int(Rnd() * ([E3] - [E2])) + [E2]
Loop
Next i
[b11] = [b1] - WorksheetFunction.Sum(Range("b2:b10"))
End Sub


但运行非常容易就导致excel 无法响应,求助
7898 次点击
所在节点    程序员
4 条回复
yuguig
2014-09-17 12:02:48 +08:00
每个数90~110之间?好矛盾的限定……
只需要9个随机数,之和小于100
jybox
2014-09-17 12:10:21 +08:00
这个思路如何:

result = []

for 0 .. 99
pos = random(0, 9)

if result[pos]
result[pos] += 1
else
result[pos] = 1
jybox
2014-09-17 12:10:56 +08:00
baocool
2014-09-17 12:16:08 +08:00
实际需要并不特指10组数/和为100,所以,亲们,直接给个EXCEL 表吧

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/133931

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX