matlab⽣成不重复的随机数_Excel随机数产⽣函数Rand与
RandBetween的。。。
在 Excel 中,⽣成随机数可以⽤Rand函数或RandBetween函数,其中前都⽤于⽣成 0 到 1 的⼩数随机数,后者⽤于⽣成指定范围的整数随机数。Rand函数也可以⽣成指定范围的随机数,但要⽤公式 =RAND()*(b-a)+a,且⽣成的随机数仍然为⼩数。
直接⽤Rand函数或RandBetween函数⽣成随机数,都可能产⽣重复的随机数,如果要求⽣成不重复的随机数,需先产⽣种⼦再⽤种⼦⽣成随机数,或⽤ Small + If + CountIf + Row + Int + Rand 函数⽣成。在默认情况,⽤Rand函数或RandBetween函数⽣成的随机数容易发⽣变化,如果要求⽣成不变的随机后,需要把它们转为数值。
⼀、Excel随机数产⽣函数的语法excel表格随机函数
(⼀)Rand函数
1、表达式:RAND()
2、说明:
A、Rand函数⽤于⽣成 0 到 1 之间的随机数;如果要⽣成 a 与 b 之间的随机数,需要使⽤ RAND()*(b-a)+a;例如⽣成 1 到 100 的随机数,可以⽤公式 =RAND()*(100-1)+1。
B、⽤Rand函数⽣成的随机数,每次计算⼯作表时会变为另⼀个随机数,如果要求不变,输⼊公式 =RAND() 后,保持编辑状态,按 F9 把公式转为数值,具体见下⽂的实例。
(⼆)RandBetween函数
1、表达式:RANDBETWEEN(Bottom, Top)
2、说明:
A、RandBetween函数⽤于⽣成任意两个指定数之间的随机数,参数 Bottom 为指定数值范围的最⼩值、Top 为指定数值范围的最⼤值。
B、与Rand函数⼀样,RandBetween函数⽣成的随机数,每次计算⼯作表时也会变为另⼀个随机数,如果要求已⽣成的随机数不变,输⼊完公式后,按 F9 把公式转为数值即可。
⼆、Excel随机数产⽣函数 Rand 的使⽤实例
(⼀)⽣成 0 到 1 之间的固定不变的⼩数随机数
选中 A1 单元格,输⼊公式 =rand(),按回车,返回随机数 0.500716885;双击 A1,按回车,随机数变为 0.140809335,每执⾏⼀次公式,随机数会变化;再次双击 A1,按 F9,则公式转为随机数 0.859460188902102,再怎么双击 A1,也不会出现公式,随机数也不会再变化;操作过程步骤,如图1所⽰:
图1
(⼆)⽣成指定范围的随机数
1、假如要⽣成 100 到 1000 之间的随机数。双击 A1 单击格,把公式 =INT(RAND()*(1000-100)+100) 复制到 A1,按回车,返回随机数816;操作过程步骤,如图2所⽰:
图2
2、公式 =INT(RAND()*(1000-100)+100) 说明:
⽤ Rand 函数⽣成 100 到 1000 之间的随机数可⽤公式 =RAND()*(b-a)+a,a 为 100,b 为 1000,但⽤此公式⽣成的随机数是⼩数,如果要⽣成整数的随机数, 要⽤ Int 函数取整。
三、Excel随机数产⽣函数 RandBetween 的使⽤实例
(⼀)⽣成指定范围的固定不变的整数随机数
假如要⽣成 0 到 100 之间的随机数。双击 A1 单元格,把公式 =RANDBETWEEN(0,100) 复制到 A1,按回车,返回随机数 57;双击A1,按回车,随机数变为 15,每执⾏⼀次公式,随机数也会变化;再次双击 A1,按 F9,把公式转为数值 10,再双击 A1,不会再出现公式;操作过程步骤,如图3所⽰:
图3
(⼆)⽣成正负数之间的随机数
假如要⽣成 -100 到 100 之间的随机数。双击 A1 单元格,把公式 =RANDBETWEEN(-100,100) 复制到 A1,按回车,返回随机数
9;再次双击 A1,按回车,返回随机数 -99;操作过程步骤,如图4所⽰:
图4
四、Excel随机数产⽣函数的扩展应⽤
(⼀)⽣成固定不变的随机数
Excel⽣成固定不变的随机数有两种⽅法,⼀种为输⼊公式后按 F9,把公式转为数值,在上⾯已经介绍过;另⼀种⽅法为把⽣成的随机数复制为数值,此⽅法可以批量把⽣成的随机数转为固定不变的数值,具体⽅法如下:
双击 A1 单元格,⾥⾯是⼀个⽣成随机数的公式,按回车,⽣成新的随机数;框选 A1:B9,当前选项卡为“开始”,单击窗⼝左上⾓
的“粘贴”,在弹出的选项中选择“粘贴数值”下的“值”图标,则选中的所有单元格中的⽣成随机数公式转为数值,再次双击 A1,已经没有公式;操作过程步骤,如图5所⽰:
图5
(⼆)⽣成不重复的随机数
(1)先⽣成种⼦,再⽤种⼦⽣成不重复的随机数
1、⽣成不重复的⼩数随机数
A、⽣成种⼦。双击 A1 单元格,把公式 =RAND() 复制到 A1,按回车,⽣成⼀个⼩数随机数;选中 A1,把⿏标移到 A1 右下⾓的单元格填充柄上,按住左键,往下拖⼀直拖到 A10,则所经过单元格都变为同⼀随机数,按 Ctlr + S 保存,则 A1:A10 更新为不同的随机数;
B、⽣成不重复随机数。双击 B1,把公式 =RAND() 复制到 B1,输⼊ *A1,按回车,返回⼀个新的随机数;选中 B1,把⿏标移到 B1 右下⾓的单元格填充柄上,⿏标变为⿊⾊加号后,双击左键,则 B2:B10 变为与 B1 ⼀样的随机数,按 Ctrl + S 保存,B2:B10 变为不同的随机数;操作过程步骤,如图6所⽰:
图6
2、⽣成不重复的指定范围的整数随机数
A、假如要⽣成 50 到 100 之间的随机数。双击 A2 单元格,把公式 =RANDBETWEEN(50,100) 复制到 A2,按回车,⽣成⼀个种⼦随机数,⽤往下拖的办法⽣成其它种⼦随机数;
B、双击 B2,把公式 =INT(RANDBETWEEN(50,100)*A2/100) 复制到 B2,按回车,⽣成⼀个随机数,⽤双击 B2 单元格填充柄的⽅法⽣成其它随机数;操作过程步骤,如图7所⽰:
图7
C、公式 =INT(RANDBETWEEN(50,100)*A2/100) 说明:
先⽤ RANDBETWEEN(50,100) 产⽣ 50 到 100 的随机数,再⽤该随机数与 A2 中的种⼦随机数相乘,然后再除 100(由于两个 50 到100 的数值相乘扩⼤了 100 倍,因此要缩⼩ 100 倍),最后⽤ Int 函数取整。
提⽰:先⽣成种⼦再⽤种⼦⽣成随机数不能保证⽣成的随机数⼀定不重复,如果要求⽣成唯⼀的随机数,需要下⽂的⽅法。
(2)⽤ Small + If + CountIf + Row + Int + Rand 函数⽣成不会重复的随机数
A、假如要⽣成 1 到 12 之间的不重复随机数。双击 A2 单元格,把公式
=SMALL(IF(COUNTIF(A$1:A1,ROW($1:$12))=0,ROW($1:$12)),INT(RAND()*(12-ROW(1:1))+1)) 复制到 A2,按 Ctrl + Shift +回车,⽣成随机数 6;把⿏标移到 A2 右下⾓的单元格填充柄上,⿏标变为⿊⾊加号后,往下拖⼀直拖到 A13,则所经过单元格全变为6,按 Ctrl + S 保存,则 A2:A13 变为 1 到 12 的随机数;操作过程步骤,如图8所⽰:
图8
B、公式=SMALL(IF(COUNTIF(A$1:A1,ROW($1:$12))=0,ROW($1:$12)),INT(RAND()*(12-ROW(1:1))+1)) 说明:
[1]、A$1 表⽰对列相对引⽤、对⾏绝对引⽤($ 表⽰绝对引⽤),当往下拖时,A1 不会变为 A2、A3 等;当往右拖时,A1 会变为 B1、
C1 等。A1 表⽰对列和⾏都是相对引⽤,当往下拖时,A1 会变为 A2、A3 等;当往右拖时,A1 会变为 B1、C1 等。
[2]、A$1:A1 ⽤于返回当前单元格到拖到单元格的所有数值;当公式在 A2 时,A$1:A1 返回 A1,A1 为空,因此返回 0;当公式在 A3时,A$1:A1 变为 A$1:A2,它以数组形式返回 A1、A2 中的数值,即返回 {0;5};其它的以此类推。
[3]、$1 表⽰对⾏的绝对引⽤,当往下拖时,1 不会变为 2、3 等;$12 与 $1 是⼀个意思;ROW($1:$12) ⽤于返回 1 到 12 的数组,即返回 {1;2;3;4;5;6;7;8;9;10;11;12}。
[4]、当公式在 A2 时
COUNTIF(A$1:A1,ROW($1:$12)) 变为 COUNTIF(A1,{1;2;3;4;5;6;7;8;9;10;11;12}),A1 为统计个数的范围,数组为条件,执⾏时,依次取条件数组中的每个元素统计在 A1 中出现的次数,第⼀次执⾏取条件数组的第⼀个元素 1,由于 A1 的数值为 0,因此统计结果为 0;第⼆次执⾏取 2,统计结果也为 0;其它的以此类推;最后返回 {0;0;0;0;0;0;0;0;0;0;0;0};
则 COUNTIF(A$1:A1,ROW($1:$12))=0 变为 {0;0;0;0;0;0;0;0;0;0;0;0}=0,接着,取数组中的每个元素与 0 ⽐较,如果相等,返回True,否则返回 False,最后返回 {TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE};
则 IF(COUNTIF(A$1:A1,ROW($1:$12))=0,ROW($1:$12)) 变为
IF({TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE},
{1;2;3;4;5;6;7;8;9;10;11;12}),执⾏时,依次取 IF 条件数组中的每个元素出来,如果为 True,返回第⼆个数组与之对应的元素,否则返回 False;由于条件数组中全为 True,因此返回 {1;2;3;4;5;6;7;8;9;10;11;12};
1:1 表⽰对⾏的相对引⽤,往下拖时,1:1 会变为 2:2、3:3 等;ROW(1:1) 返回第⼀⾏的⾏号 1;12-ROW(1:1) 返回 11,12 是⽣成指定范围随机数的上限;
RAND() ⽤于返回 0 到 1 的⼩数随机数,假如它返回 0.401319158944677,则 INT(RAND()*(12-ROW(1:1))+1) 变
INT(0.401319158944677*11+1),进⼀步计算变为 INT(4.414510748391450+1),接着,⽤ Int 函数取整,结果为 5;
则公式变为 =SMALL({1;2;3;4;5;6;7;8;9;10;11;12},5),最⽤ Small 函数返回数组中第 5 个最⼩的数,即返回 5。
[5]、公式在 A3 时
COUNTIF(A$1:A2,ROW($1:$12)) 变为 COUNTIF(A$1:A2,{1;2;3;4;5;6;7;8;9;10;11;12}),执⾏时,同样依次取条件数组中的每个元素统计在 A1:A2 中的个数,由于 A1 为 0,A2 为 5,因此 A1:A2 返回 {0;5};第⼀次执⾏取条件数组中的 1,由于数组 {0;5} 中没有1,因此返回 0;第⼆次取 2,同样返回 0;其它的以此类推,最后返回 {0;0;0;0;1;0;0;0;0;0;0;0};
则 COUNTIF(A$1:A2,ROW($1:$12))=0 变为 {0;0;0;0;1;0;0;0;0;0;0;0}=0,计算结果为
{TRUE;TRUE;TRUE;TRUE;FALSE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE;TRUE};
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论