我的逻辑出现问题。我需要一组随机数来添加100.应用于数字的约束如下:
1号 - 介于20和80之间
2号 - 10到40之间
3号 - 5到20之间
我知道这可能很简单,但无法绕过它。
提前致谢。
答案 0 :(得分:1)
这些计算何时需要执行? (因为它使用randomBetween重新计算每次单元格更改值。并且有可能出现第一个数字15-19。我试图找出如何使用宏来防止它。
答案 1 :(得分:1)
如果你这样做,那么E到G列就是你的随机数。 H列是一个检查,以确保在缩放后仍然满足您的约束。这对宏观解决方案的好处是计算效率,因为大约80%的尝试导致满足约束,而宏观方法仅产生略高于1%。当然,这种缩放逻辑可以在宏中完成,但这里是在工作表函数中。
编辑:看起来我的屏幕截图接近不可读,所以这里是第一行从左到右的公式......
=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)
答案 2 :(得分:0)
(如果一开始你没有成功...... )
简单.....只需运行这个小宏:
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 强>:
宏非常易于安装和使用:
如果保存工作簿,宏将随之保存。 如果您在2003年之后使用的是Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
删除宏:
要使用Excel中的宏:
要了解有关宏的更多信息,请参阅:
http://www.mvps.org/dmcritchie/excel/getstarted.htm
和
http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx
必须启用宏才能使其正常工作!
修改#2 强>:
删除旧宏并将其替换为:
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