Office中国论坛/Access中国论坛

标题: OfficePK第12期:Excel挑战Access,快速生成不重复随机数 [打印本页]

作者: pureshadow    时间: 2016-4-2 20:49
标题: OfficePK第12期:Excel挑战Access,快速生成不重复随机数
在Excel里生成随机数没什么,但要生成不重复的随机数有点麻烦,不过,再怎么麻烦,还是可以生成的。

于是就挑战一下Access吧,如何在Access中快速生成不重复的随机数。

Excel我会提供三种解法,叠代法、数组法和一个BT的简单方法,先悬念一下,过两天再来写。有知道各种解法的,也欢迎跟贴,这样我可以省点事。

作者: tmtony    时间: 2016-4-2 21:45
一下子出3题。神速啊,哦,妖速
这题是针对Access的,先对付这题
作者: tmtony    时间: 2016-4-2 22:14
原来 版主们已经做好答案在等这题了
1. 【Access小品】定量不重复随机抽选
     http://www.office-cn.net/thread-79259-1-1.html
2.  【算法】抽取不重复的随机数函数
     http://www.office-cn.net/thread-118713-1-1.html
3.   产生一个1-N 的不重复随机数
     http://www.office-cn.net/thread-118581-1-1.html
作者: roych    时间: 2016-4-4 15:04
本帖最后由 roych 于 2016-4-6 01:24 编辑

站长,我只能说你的方法太复杂了:
[attach]58642[/attach]
只要不是小数,完全秒成渣。至于小数嘛……
1、如果是2013版本,可以创建一个计算字段,除以整数(例如100或者10000什么的)。
2、2013版本以下,则使用查询中的表达式,具体不用多说了吧?
科普一下:
主键是不能重复的。因此由上面得到的随机数是不会重复的。当然,由于自动编号属于长整型,值域不能像双精度那样宽。
---------------------------
2016-4-6更新附件

双击“生成随机数”,在弹出的对话框里点击“是”(如图)【这里没有用宏来避开这个警告栏】:
[attach]58676[/attach]
然后双击打开查询“随机正数及小数”即可显示【如对正负数不做要求则可以打开表“测试数据”来查看】。
[attach]58675[/attach]
另,2007版本可以使用计算字段来代替查询【虽然我还是保留了查询】。

作者: pureshadow    时间: 2016-4-8 20:08
将ID设置成随机,这个我会了,其他的……还是不会……我承认我是笨妖。

作者: pureshadow    时间: 2016-4-8 20:24
好吧,下来面看看Excel的解法。
第一种,迭代法。
把下面这个公式写在B2单元格里。
  1. =IF(COUNTIF(B$2:B$11,A1)=1,A1,RANDBETWEEN(1,100))
复制代码

不过,按下回车,会被提示“循环错误”,所以还需要启用迭代计算:【文件】》【选项】》【公式】》勾选【启用迭代计算】/【最多迭代次数】改为1
如附件。


作者: pureshadow    时间: 2016-4-8 20:31
第二种,数组法。
既然是数组法,那就是用数组公式了,这公式还是写在B2单元格里:
  1. =SMALL(IF(COUNTIF(B$1:B1,ROW($1:$10))=0,ROW($1:$10)),INT(RAND()*(10-ROW(A1))+1))
复制代码

如附件。
作者: pureshadow    时间: 2016-4-10 17:06
第三个BT法,不说了,直接上视频

作者: Superleistung    时间: 2016-4-13 13:36
这个方法果然BT~




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3