我如何使随机数(有限制)不使用求解器添加一个总和?
我的逻辑遇到了麻烦。 我需要一组随机数来加100.对这些数字应用的约束如下:
数字1 – 在20和80之间
数字2 – 在10和40之间
3号 – 5至20
我知道这可能很简单,但不能把我的头围绕它。
提前致谢。
如果你这样做,那么列E到G将是你的随机数字。 列H是一个检查,以确保您的约束仍然满意后缩放。 macros观解决scheme的好处是计算效率,因为大约80%的尝试导致约束得到满足,而不是macros观方法,只会产生超过1%。 这个缩放逻辑当然可以在macros中完成,但是在这里是在工作表函数中。
编辑:看起来像我的屏幕捕捉接近不可读所以这里是公式从左到右的第一行…
=RANDBETWEEN(20,80) =RANDBETWEEN(10,40) =RANDBETWEEN(5,20) =SUM(A1:C1) =A1/($D1/100) =B1/($D1/100) =C1/($D1/100) =IF(AND(E1>=20,F1<=80,G1>=5,G1<=20),1,0)
这些计算何时需要执行? (因为它使用randomBetween重新计算每次单元格更改值,并有一个数字15-19可能出现的第一号的机会,我试图找出如何防止它不使用macros…
( 如果起初你不成功… )
容易…..只是运行这个小macros:
Sub randommm() Dim wf As WorksheetFunction Set wf = Application.WorksheetFunction zum = 0 While zum <> 100 v1 = wf.RandBetween(20, 80) v2 = wf.RandBetween(10, 40) v3 = wf.RandBetween(5, 20) zum = v1 + v2 + v3 DoEvents Wend [A1] = v1 [A2] = v2 [A3] = v3 End Sub
编辑#1 :
macros很容易安装和使用:
- ALT-F11调出VBE窗口
- ALT-I ALT-M打开一个新的模块
- 粘贴东西,closuresVBE窗口
如果您保存该工作簿,该macros将与它一起保存。 如果您在2003年以后使用的是Excel版本,则必须将该文件另存为.xlsm而不是.xlsx
要删除macros:
- 如上所示调出VBE窗口
- 清除代码
- closuresVBE窗口
从Excel使用macros:
- ALT-F8
- selectmacros
- 触摸RUN
要了解有关macros的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
macros必须启用这个工作 !
编辑#2 :
删除旧的macros并将其replace为:
Sub randommm() Dim wf As WorksheetFunction Set wf = Application.WorksheetFunction For i = 1 To 1000 zum = 0 While zum <> 100 v1 = wf.RandBetween(20, 80) v2 = wf.RandBetween(10, 40) v3 = wf.RandBetween(5, 20) zum = v1 + v2 + v3 DoEvents Wend Cells(i, 1) = v1 Cells(i, 2) = v2 Cells(i, 3) = v3 Next i End Sub