Excel中的随机数并非是每个用户都需要的功能,大多数人的数据都会使用固定数字和公式,可能不需要在他们的报告中出现随机数。
财务模型可以使用依赖于概率的随机模拟,有些数据模型可能需要运行数千次,但随机数生成器会提供每次模拟的参数。
无论您需要怎么样的随机数,Excel都有多种生成它们的方法。
1/使用RAND函数生成随机数
我将向您展示的第一种方法是在Excel中生成随机值的最简单方法。
Excel中有一个非常简单的RAND函数,它不需要参数,会生成一个0到1之间的随机数。
RAND函数示例:
有可能会存在重复值,但是概率会比较低,因为在0和1之间的小数是太多了。返回的值将遵循均匀分布。这意味着0和1之间的任何数字都有可能被返回。
使用RAND()在任意两个数字之间生成随机数:
可以使用RAND()函数的简单公式在任意两个数字之间生成随机数。
=RAND()*(Y-X)+X这样就可以在X和Y之间创建一系列随机数。
在任意两个数字之间生成随机整数:
有时,我们遇到的需求是在两个给定数字之间生成随机整数。这也可以使用一个简单的公式来完成。
=ROUND(RAND()*(Y-X)+X,0)即使用ROUND函数对RAND函数的结果进行四舍五入到零小数位
可以将这个公式复制到电子表格的列中,如果您一直按F9重新计算,您将看到从1到10的各种数字组合
但是由于整数数字是离散的,生成的随机数很可能在列表中重复,这取决于生成随机范围的最小值和最大值。
将RAND函数乘以7将产生0到7之间的随机数。将-3添加到结果并四舍五入到零小数位,这将给出-3到4的随机整数范围。
2/使用RANDBETWEEN函数生成随机数
这个函数相对比使用RAND函数更容易使用,因为它包含额外的运算符来达到需要的特定随机数范围。
RANDBETWEEN函数的语法:
=RANDBETWEEN(bottom,top)RANDBETWEEN函数示例:
3/使用RANDARRAY函数生成随机数
部分情况下,可能不仅需要单个随机值,还需要一组随机值。RANDARRAY函数是对此的完美解决方案。它将用一组随机数填充一系列单元格,不过此功能仅适用于Microsoft365版本的Excel
RANDARRAY函数的语法:
=RANDARRAY([rows],[columns],[min],[max],[whole_number])此函数的所有参数都是可选的。如果不包含任何参数,将获得一个带随机小数,与RAND函数的结果相同
RANDARRAY函数示例:
请注意,数组的左上角始终锚定在公式所在的单元格上。按F9重新计算电子表格将更改数组中的所有数字
注意:如果输入的输出范围内的一个单元格中已经有了数据,将收到#SPILL!错误,同时不会覆盖任何已有数据
4/使用分析工具插件生成随机数
还有另一种方法可用于在不使用公式的情况下插入随机数。可以使用加载项来创建随机数。Excel附带一个分析工具库加载项,但您需要先安装它才能使用它
1/单击功能区中的文件选项卡
2/在窗口的左下方窗格中,向下滚动并单击选项
3/在弹出窗口的左侧窗格中,单击加载项
4/勾选分析工具库,单击确定
5/Excel功能区的“数据”选项卡上,现在有一个名为“分析”的组,就可以看到到“数据分析”的选项
使用分析工具包生成随机数:
可以在其中输入参数以生成随机数
5/用VBA生成随机数
VBA(VisualBasicforApplications)是位于Excel前端的编程语言,也可用于生成随机数。但是,它比简单地在Excel中的单元格中输入公式要复杂,而且需要一些编程知识才能使用它
要打开VBA编辑器,请使用Alt+F11键盘快捷键
在窗口(项目资源管理器)的左侧窗格中,将看到打开的工作簿(包括加载项)和可用的工作表
在窗口顶部的菜单上,单击“插入”,然后单击“模块”。这将向当前电子表格添加一个模块窗口。将以下代码粘贴或添加到模块中
SubRandomNumber()MsgBoxRnd()EndSub按F5运行它,Excel中将出现一条消息弹出窗口,并显示一个随机数。点击确定,您将返回代码窗口。
再次运行代码,将显示不同的随机数。随机数将介于0和1之间,但不包括0或1的值。
还可以为Rnd函数提供一个参数,该参数是用于生成随机数的算法起点的种子。如果种子值设置为负数或零,则每次将显示相同的随机数。
例如,如果您想生成3到10之间的完整随机数,则可以使用以下代码。此代码将随机数乘以7,然后将其加3,然后四舍五入到小数点零位。假设您想在单元格中显示您的随机数。您可以使用以下代码执行此操作
SubRandomNumberV2()Randomize(10)MsgBoxRound((Rnd()*7)+3)EndSub6/生成不重复的随机数
可能会遇到这样一种情况:想生成一系列随机数,但又不想看到任何重复值出现。
可能希望从1到10的数字之间选择3个随机数,但其中3个所选数字中的每一个都是唯一的。
有几种可能的解决方案:
RANK.EQ和COUNTIF函数的解决方案:
先使用RANDBETWEEN创建随机数,然后使用下一列中的公式对它们进行排名,从而从1到10的随机排序序列
用VBA解决:
还可以使用VBA生成一串从1到10的无重复随机数
SubRandomNumberNoDuplicates()DimMAsInteger,TempAsString,RandNAsIntegerForM=1To5Repeat:RandN=Round((Rnd(10)*9)+1,0)IfInStr(Temp,RandN)ThenGoToRepeatActiveSheet.Cells(M,1)=RandNTemp=Temp&RandN&"|"NextMEndSub代码迭代从1到5的值,每次生成1到10之间的随机数。
它测试随机数以检查它是否已经生成。这是通过将成功的数字连接成一个字符串然后搜索该字符串以查看该数字是否已被使用来完成的。
如果已找到,则它使用标签重复返回并重新生成一个新号码。再次测试它尚未使用。如果是新号码,则将其添加到工作表中
动态数组的解决方案:
假设要从序列1到10中返回5个数字。您希望每个选择的数字都是唯一的。这可以使用SEQUENCE、SORTBY、RANDARRAY和INDEX函数的组合来完成
然后使用SORTBY函数以随机顺序对它们进行排序,并对RANDARRAY函数生成的随机数列进行排序。效果是按随机顺序对序列进行排序。
现在,如果想获得5个随机且唯一的数字,只需从随机排序的序列中取出前5个数字。这正是INDEX函数所做的!这部分公式将从随机排序的序列中返回前5个数字
结论
在Excel中有多种生成随机数的方法。无论您需要整数、小数还是具有上限和下限的随机数范围,都可用Excel来生成。
但是,请记住,这些数字是由算法生成的伪随机数。尽管随机数生成器通过了所有随机性测试,但它们并不是真正的随机数