好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

用EXCEL按比例生成随机数(共4页).docx

4页
  • 卖家[上传人]:文库****9
  • 文档编号:210892064
  • 上传时间:2021-11-15
  • 文档格式:DOCX
  • 文档大小:86.83KB
  • / 4 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 精选优质文档-----倾情为你奉上用EXCEL按比例生成随机数(或叫按机率生成随机数) 这是百度知道一位同学的提问要求生成范围为1到50的随机整数,并且,1-15的机率为50%,16-36的机率为30%,37-50的机率为20%同时还要求生成500组,每组8个我当时给出一个公式:=if(rand()<0.5,round(rand()*14,0)+1,if(rand()<0.6,round(rand()*20,0)+16,round(rand()*13,0)+37))这里说下用round和用int的区别,用int生成16-36的随机数的话应该用int(rand()*21+16),而用round可用round(rand()*20+16),这后面的+16放括号里面外面都一样,因为取整操作是由小数部分决定的还有我第二个if的判断用的是rand()<0.6而不是小于0.3,这是因为第二个if会执行的机率是50%,50%乘以0.6就是30%后来楼主同学又出怪招,要求每组无重复数字,每组从小到大排列这个只用单纯的公式的话不好办了我写了个VBA:Sub madeRnd()Dim i, j, k, a(8), flag, tSheets("Sheet1").SelectFor k = 1 To 500生成一组随机数字For i = 1 To 8flag = 0DoRandomizet = Rnd()If t < 0.5 Thena(i) = Int(Rnd() * 15 + 1)ElseIf t < 0.8 Thena(i) = Int(Rnd() * 21 + 16)Elsea(i) = Int(Rnd() * 14 + 37)End IfIf i >= 2 ThenFor j = 1 To i - 1If a(i) = a(j) Thenflag = 1Exit ForElseflag = 0End IfNext jEnd IfLoop While flag = 1Next i给随机数排序For i = 7 To 1 Step -1For j = 1 To iIf a(j) > a(j + 1) Thena(0) = a(j)a(j) = a(j + 1)a(j + 1) = a(0)End IfNext jNext i输出一组随机数字For i = 1 To 8Cells(k, i) = a(i)Next iNext kEnd Sub很奇怪,我在表格上用公式写了个机率统计,就是统计这8*500个单元格的数据分布。

      发现我开始用公式生成的机率很正常,非常接近50%,30%,20%这个比例,波动不超过1%而用VBA生成的数据,机率就有点偏,总是在48%,31%,21%这样子我不得不调整一下,如把VBA里面的判断条件t<0.5稍微改下,改成t<0.5+0.0175这样子稍微调高1-15出现的机率这是什么原因?难道是VBA的rnd()函数没有EXCEL表格函数的rand()公正?可以谢幕了吗?no!!there is no little case in the world.||||||怪同学又来了,再次提出无理要求,要求可以方便的随意更改数字范围只能用上传说中的人机交互接口了其实就是个窗体啦这里贴张图片这个从上面的VBA改一改就可以了修改:对了,我后来才发现,我的排序居然没起作用原来排序的语句我写成for i = 7 to 1,汗,高一时学的basic,早忘得差不多了,这里应该改成for i = 7 to 1 step -1,我上面的VBA代码已经改好了这个排序正确的图片就不再重发了最后再提一点,回答问题的可不止我一个,有一位“小色”兄弟,也是写的VBA我看了下他的,跟我的思路不一样,他的可是绝对的50:30:20的比例。

      他的方法大概是这样的:从8乘500的单元格里,随意抽取一个单元格,如果单元格为空,就往里面填数据抽取2000次填1-15的随机数,抽取1200次填16-36的随机数,抽取800次填37-50的随机数我的思路?就跟我那个VBA一样的,生成一个随机数,根据它的取值来决定生成哪个区间的整数最后还有一位神级大哥,他的方法已经是大道天成,已经达到了手中无剑,心中有剑,万物皆可为剑的至高境界方法很简单,我直接复制他的过来:1.首先 工具-加载宏,勾选分析工具库. 勾选后,工具菜单下出现"数据分析"菜单 2.在A1:A50输入序列1-50 B1:B15输入=0.5/50 B16:B36输入=0.3/21 B37:B50输入=0.2/14 3.工具-数据分析,随机数字发生器. 变量个数:8 随机数个数:500 分布:离散 数值与概率输入区域:A1:B50 输出新工作表组,默认不改即可. 确定. 从小到大排序显示: I1输入公式: =SMALL($A1:$H1,COLUMN(A1)) 向右拖动填充公式到P1, 然后选中I1:P1 向下拖动到P500这个,EXCEL真强大专心---专注---专业。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.