分享

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

 我的人生宝库 2019-12-01

在 Excel 中,生成随机数有两个函数,分别为Rand函数和RandBetween函数,前者用于生成 0 到 1 之间的随机数,后者用于生成指范围的随机数。它们生成的随机数中都会产生重复值,如果要生成不重复的随机数得用变通的方法,通常有两种方法,一种为先生成种子再生成不重复的随机数,另一种为用多个函数生成。以下就是Excel生不重复随机数和小数随机数的具体操作方法,实例中操作所用版本均为 Excel 2016。

一、Excel随机数生成函数

(一)Rand函数

1、表达式:RAND()

2、说明:RAND() 用于生成 0 到 1 之间均匀分布的随机数。如果要生成指定范围的随机数,表达式可以这样写:RAND()*(b-a) + a。

(二)RandBetween函数

1、表达式:RANDBETWEEN(bottom, top)

2、说明:RandBetween 用于生成指定范围的随机数,bottom 为生成随机数的开始值,top 为生成随机数的最大值。例如:要生成 10 到 100 的随机数,可以这样写:RANDBETWEEN(10, 100)。

二、Excel随机数生成的方法举例

(一)用 RAND() 生成小数随机数

1、选中 A1 单元格,输入公式 =RAND(),按回车,则生成一个小数随机数;再次选中 A1,把鼠标移到 A1 右下角的单元格填充柄上,按住左键,往下拖,则所经过单元格都用 A1 的值填充,按 Ctrl + S 保存,则每个单元格变为新生成的随机数;操作过程步骤,如图1所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图1

2、用 Rand() 生成指定范围的随机数

假如要生成 1 到 100 的随机数。选中 A1 单元格,把公式 =RAND()*(100 - 1) + 1 复制到 A1,按回车,则生成一个 1 到 100 之间的随机数;同样方法往下拖并保存生成其它随机数,操作过程步骤,如图2所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图2

(二)用 RandBetween() 生成指定范围的随机数

假如要生成 50 到 100 之间的随机数。选中 A1 单元格,把公式 =RANDBETWEEN(50, 100) 复制到 A1,按回车,生一个 50 到 100 之间的随机数;同样用往下拖并保存的方法生成其它随机数,操作过程步骤,如图3所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图3

三、Excel生成不重复的随机数

(一)方法一:先生成种子再生成不重复的随机数

1、生成不重复的小数随机数。选中 A1 单元格,输入公式 =RAND(),按回车,则生成一个随机数,把鼠标移到 A1 的单元格填充柄上并往下拖,然后 Ctrl + S 保存,生成其它随机数;选中 B1 单元格,输入公式 =RAND()*A1,按回车,则生成一个不重复随机数,同样方法往下拖并保存,生成其它不重复随机数;操作过程步骤,如图4所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图4

2、生成不重复的整数随机数

A、假如要生成 10 到 100 之间的不重复随机数。把公式 =RANDBETWEEN(10,100) 复制到 A1 单元格,按回车,生成一个随机数;用往拖并保存的方法生成其它随机数;把公式 =INT(RANDBETWEEN(10,100)*A1/100) 复制到 B1 单元格,按回车,生成一个不重复的随机数,同样用往下拖的方法,生成其它不重复的随机数;操作过程步骤,如图5所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图5

B、公式说明:公式 =INT(RANDBETWEEN(10,100)*A1/100) 先用 RANDBETWEEN 求出 10 到 100 之间的随机数,然后乘 A1 中的随机数,再除以 100 以确保所求随机数在 10 至 100 之间,最后用 Int 函数取整。

提示:这个方法不能确保绝对不生成重复的随机数,当每次生成的随机数有两组完全相同时,同样会生成重复的随机数。例如,A2 和 B2 生成的随机数与 A5 和 B5 生成的随机数相同,那么 B2 = A2 × RAND() 等于 B5 = A5 × RAND(),则在 B2 与 B5 生成的随机数相同。

(二)方法二:用公式生成准确不重复随机数

1、假如要生成 1 到 10 之间的不重复随机数。把公式 =SMALL(IF(COUNTIF($A$1:A1,ROW($1:$10))=0,ROW($1:$10)),INT(RAND()*(10-ROW(1:1))+1)) 复制到 A2 单元格,按 Ctrl + Shift + 回车,则生成一个 1 到 10 之间的不重复随机数;把鼠标移到 A2 的单元格填充柄上并往下拖,然后保存,则生成 1 到 10 之间的其它不重复随机数;操作过程步骤,如图6所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图6

2、公式说明

A、$A$1:A1 中的 $A$1 表示绝对引用,A1 表示相对引用,即往下拖时,$A$1 始终不变,A1 则会变为 A2、A3 等。

B、ROW($1:$10) 是对一组单元格的引用,返回一个 1 到 10 的数组,即 {1;2;3;4;5;6;7;8;9;10}。

C、ROW(1:1)是对一个单元格的引用,返回一个一行一列的数组,往下拖时会变为 ROW(2:2)、ROW(3:3) 等。

D、用公式求值查看公式执行过程

选中 A2 单元格,选择“数据”选项卡,单击“公式求值”,打开“公式求值”窗口,单击一次“求值”,则计算一步。第一次单击“求值”,把公式中的 ROW($1:$10) 变为 {1;2;3;4;5;6;7;8;9;10},

E、逆向解析公式执行过程

1)公式执行到最后一步变为 =SMALL({1;2;3;4;5;6;7;8;9;10},8},如图8所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图8

2)公式 =SMALL({1;2;3;4;5;6;7;8;9;10},8} 的意思是:从数组 {1;2;3;4;5;6;7;8;9;10} 中找出第8小的数,即为 8;也就是说前面步骤所要做的工作就要生成数组 {1;2;3;4;5;6;7;8;9;10} 和生成序号 8。

3)IF(COUNTIF($A$1:A1,ROW($1:$10))=0,ROW($1:$10)) 负责生成数组 {1;2;3;4;5;6;7;8;9;10},INT(RAND()*(10-ROW(1:1))+1) 负责生成序号 8。

4)COUNTIF($A$1:A1,ROW($1:$10) 是统计数组 {1;2;3;4;5;6;7;8;9;10} 每个元素在 A1 中出现的个数,A1 单元格为空,因此,统计结果全为 0,即{0;0;0;0;0;0;0;0;0;0},如图9所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图9

再看 A4 单元格中的同样步骤(选中 A4,打开“公式求值”窗口,点“求值”一直到与图9一样的步骤),第 1、3 个元素为 1,即 {1;0;1;0;0;0;0;0;0;0},为什么第 1、3 个元素为 1,其它元素为 0?,因为 1 和 3 已经生成了随机数,即 A2 和 A3 中的随机数,如图10所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图10

继续往后执行,1 会变为 False,0 会变 True,如图11所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图11

也就是为 False 的,就不会再从 ROW($1:$10)(即 {1;2;3;4;5;6;7;8;9;10})返回元素,如图12所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图12

当用 Small 从{False;2;False;3;4;5;6;7;8;9;10} 返回元素时,只从数字中返回,False 将被忽略。

5)RAND()*(10-ROW(1:1))+1 表示生成 1 到 10 之间的随机,可参照 Rand() 生成指定范围(a 到 b)的随机数公式 RAND()*(b-a) + a;最后用 Int函数取整。

3、如果要生成 10 到 100 之间的不重复随机数,公式可以这样写:

=SMALL(IF(COUNTIF($A$10:A10,ROW($10:$100))=0,ROW($10:$100)),INT(RAND()*(90-ROW(10:10))+1)),如图13所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图13

按 Ctrl + Shift + 回车,则生成一个 10 到 100 之间的随机数,用往下拖的方法生成其它 10 到 100 之间的随机数,结果如图14所示:

Excel中生成随机数有两个函数,分别为Rand函数和RandBetween函数

图14

注意:把公式复制到 A11 单元格和公式中修改的项,如 $A$10:A10、ROW($10:$100) 和 90-ROW(10:10)。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多