首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在不使用求解器的情况下使随机数(有极限)加和?

如何在不使用求解器的情况下使随机数(有极限)加和?
EN

Stack Overflow用户
提问于 2014-04-16 17:06:15
回答 3查看 3.4K关注 0票数 0

我的逻辑一直有问题。我需要一组随机数来加100。适用于这些数字的限制如下:

数字1- 20至80

数字2- 10至40

数字3-5至20

我知道这可能很简单,但我不能把它当回事。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-16 19:28:36

如果你这样做,E到G列就是你的随机数。列H是一个检查,以确保您的约束在缩放后仍然满足。这样做对宏解决方案的好处是计算效率,因为大约80%的尝试结果是满足约束条件,而不是宏方法,而宏方法只产生略多于1%的结果。当然,这个缩放逻辑可以在宏中完成,但是这里是工作表函数。

编辑:看起来我的屏幕截图越来越难读了,下面是第一行从左到右的公式.

代码语言:javascript
运行
复制
=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)
票数 1
EN

Stack Overflow用户

发布于 2014-04-16 17:22:47

这些计算什么时候需要执行?(就目前情况而言,使用randomBetween时,每次单元格更改值时都会重新计算。数字15-19有可能出现在第一位。我想弄清楚如何用宏来防止它.

票数 1
EN

Stack Overflow用户

发布于 2014-04-16 17:36:31

(如果一开始你没有成功.)

Easy.....just运行这个小宏:

代码语言:javascript
运行
复制
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

EDIT#1

宏非常容易安装和使用:

  1. ALT-F11打开VBE窗口。
  2. ALT-I ALT-M打开一个新模块。
  3. 粘贴内容并关闭VBE窗口

如果您保存工作簿,则将使用它保存宏。如果您在2003年晚些时候使用Excel版本,则必须将该文件保存为.xlsm而不是.xlsx。

若要删除宏,请执行以下操作:

  1. 打开上面的VBE窗口
  2. 清除代码
  3. 关闭VBE窗口

若要使用Excel中的宏:

  1. ALT-F8
  2. 选择宏
  3. 触控运行

要了解有关宏的更多信息,请参见:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

必须启用宏才能使其工作

EDIT#2

删除旧宏并将其替换为:

代码语言:javascript
运行
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23115834

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档