用EXCEL按比例生成随机数
《用EXCEL按比例生成随机数》由会员分享,可在线阅读,更多相关《用EXCEL按比例生成随机数(4页珍藏版)》请在装配图网上搜索。
1、用EXCEL按比例生成随机数(或叫按机率生成随机数)这是百度知道一位同学的提问。要求生成范围为1到50的随机整数,并且,1 15的机率 为50%, 1636的机率为30%, 3750的机率为20%。同时还要求生成500组,每组8个。我当时给出一个公式:二if(rand()0.5,round(rand()*14,0)+l, if (rand()0.6,round(rand()*20,0)+16,round(r and()*13,0)+37)这里说下用round和用int的区别,用int生成16 36的随机数的话应该用int(rand()*21+16),而用 round 可用 round(rand
2、()*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 = 0DoRandomize t 二 Rnd()If t
3、0.5 Thena(i) = Int( Rnd() * 15 + 1)Elself 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 = 1Nex t i给随机数排序For i = 7 To 1 Step TFor j = 1 To iIf a(j) a(j + 1) Th
4、ena(0) = a(j)a(j) = a(j + 1)a(j + 1) = a(0)End IfNext jNex t i输出一组随机数字For i = 1 To 8Cells(k, i) = a(i)Nex t iNext kEnd Sub很奇怪,我在表格上用公式写了个机率统计,就是统计这8*500个单元格的数据分布。发现我开始用公式生成的机率很正常,非常接近50%, 30%, 20%这个比例,波动不超过1%。而用VBA生成的数据,机率就有点偏,总是在48%, 31%,21%这样子。我不得不调整一下,如把VBA里面的判断条件t0.5稍微改下,改成t0.5+0.0175这样子。 稍微调高1
5、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代码已经改好了。
6、这个排序正确的图片就 不再重发了。)最后再提一点,回答问题的可不止我一个,有一位“小色”兄弟,也是写的VBA。我看了下他的,跟我的思路不一样,他的可是绝对的50: 30: 20的比例。他的方法大概是这样的:从8乘500的单元格里,随意抽取一个单元格,如果单元格为空, 就往里面填数据。抽取2000次填1 15的随机数,抽取1200次填16 36的随机数,抽取 800次填37 50的随机数。我的思路?就跟我那个VBA 一样的,生成一个随机数,根据它的取值来决定生成哪个区间的 整数。最后还有一位神级大哥,他的方法已经是大道天成,已经达到了手中无剑,心中有剑,万物 皆可为剑的至高境界。方法很简单,我直接复制他的过来:1首先工具-加载宏,勾选分析工具库.勾选后,工具菜单下出现数据分析菜单2.在 A1:A50 输入序列 1-50B1:B15 输入=0.5/50 B16:B36 输入=0.3/21B37:B50 输入=0.2/143.工具-数据分析,随机数字发生器. 变量个数:8随机数个数:500分布:离散数值与概率输入区域:Al:B50 输出新工作表组,默认不改即可. 确定.从小到大排序显示:II输入公式:=SMALL($A1:$H1,COLUMN(A1) 向右拖动填充公式到P1, 然后选中I1:P1向下拖动到P500这个,EXCEL真强大。
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。