Table of contents
本教程解释了Excel随机数生成器算法的特殊性,并演示了如何使用RAND和RANDBETWEEN函数在Excel中生成随机数字、日期、密码和其他文本字符串。
在我们深入研究在Excel中生成随机数的不同技术之前,让我们先来定义一下它们到底是什么。 通俗地说,随机数据是一系列缺乏任何模式的数字、字母或其他符号。
随机性在密码学、统计学、彩票、赌博和许多其他领域有各种不同的应用。 而且,由于它一直有需求,自古以来就有各种创造随机数的方法,如抛硬币、掷骰子、洗扑克牌等。 当然,我们在本教程中不会依赖这种 "奇特 "的技术,而是着重讨论Excel随机数生成器所能提供的东西。
Excel随机数发生器--基础知识
尽管Excel随机生成器通过了所有标准的随机性测试,但它并没有生成 真 随机数字。 但不要马上把它注销掉 :) 伪随机 由Excel随机函数产生的数字在许多方面都很好。
让我们仔细看看Excel随机生成器的算法,这样你就会知道你能从它那里得到什么,以及你不能得到什么。
像大多数计算机程序一样,Excel随机数生成器产生的 伪随机数 这对你来说意味着,从理论上讲,只要有人知道生成器算法的所有细节,Excel生成的随机数是可以预测的。 这就是为什么它从来没有被记录下来,也几乎不会被记录下来的原因。 那么,我们对Excel中的随机数生成器了解多少?
- Excel的RAND和RANDBETWEEN函数从以下方面生成伪随机数 统一的 分销 又称矩形分布,随机变量的所有数值的概率都是相等的。 均匀分布的一个很好的例子是抛掷一个骰子。 抛掷的结果是六个可能的数值(1、2、3、4、5、6),每一个数值出现的可能性都是相同的。 要想得到更科学的解释,请查阅wolfram.com。
- 没有办法给Excel的RAND或RANDBETWEEN函数添加种子,据说它们是由计算机的系统时间初始化的。 从技术上讲,一个 种子 是生成随机数序列的起点。 而每次调用Excel随机函数时,都会使用一个新的种子,返回一个唯一的随机序列。 换句话说,在Excel中使用随机数发生器时,你不能用RAND或RANDBETWEEN函数得到一个可重复的序列,也不能用VBA,更不能用任何其他方法。
- 在Excel 2003之前的早期Excel版本中,随机生成算法的周期相对较小(少于100万的非重复随机数序列),而且它在冗长的随机数序列上未能通过几个标准的随机性测试。 因此,如果有人仍然使用旧的Excel版本,你最好不要在大型模拟模型中使用RAND函数。
如果你正在寻找 真 随机数据,你可能可以使用第三方随机数生成器,如www.random.org,其随机性来自于大气噪声。他们提供免费服务来生成随机数、游戏和彩票、颜色代码、随机名称、密码、字母数字字符串和其他随机数据。
好了,这个相当长的技术性介绍结束了,我们开始讨论实际和更有用的东西。
Excel RAND函数--生成随机实数
ǞǞǞ RAND 它返回一个介于0和1之间的随机十进制数(实数),它是Excel中专门用于生成随机数的两个函数之一。
RAND()是一个不稳定的函数,这意味着每次计算工作表时都会产生一个新的随机数。 而每次你在工作表上执行任何操作时,例如更新一个公式(不一定是RAND公式,只是工作表上的任何其他公式),编辑一个单元格或输入新数据,都会发生这种情况。
RAND函数在Excel 365-2000的所有版本中都可用。
由于Excel RAND函数没有参数,你只需输入 =RAND()
在一个单元格中,然后将该公式复制到你想要的多个单元格中。
而现在,让我们更进一步,写几个RAND公式,根据你的条件生成随机数。
公式1.指定范围的上界值
要生成零和任何一个之间的随机数 N 值,你用RAND函数乘以N。
RAND()* N例如,要创建一个大于或等于0但小于50的随机数序列,使用以下公式。
=RAND()*50
注意:上界值永远不会包括在返回的随机序列中。 例如,如果你想得到0到10之间的随机数,包括10,正确的公式是 =RAND()*11
.
公式2.在两个数字之间生成随机数字
要在你指定的任何两个数字之间创建一个随机数,请使用以下RAND公式。
RAND()*( B - A )+ A在哪里? A 是下限值(最小的数字)和 B 是上界值(最大的数字)。
例如,要生成10到50之间的随机数,你可以使用以下公式。
=rand()*(50-10)+10
注意:这个随机公式将永远不会返回一个等于指定范围内最大数字的数字( B 值)。
公式3.在Excel中生成随机整数
要使Excel的RAND函数产生随机的整数,可以采用上面提到的任何一个公式,并将其包裹在INT函数中。
要在0和50之间创建随机整数。
=int(rand()*50)
产生10到50之间的随机整数。
=INT(RAND()*(50-10)+10)
Excel RANDBETWEEN函数--在指定范围内生成随机整数
RANDBETWEEN是Excel提供的另一个用于生成随机数的函数。 它返回随机的 整数 在你指定的范围内。
RANDBETWEEN(bottom, top)很明显。 b 奥特姆 是最低的数字,而 顶部 是你想得到的随机数范围内的最高数字。
和RAND一样,Excel的RANDBETWEEN是一个不稳定的函数,每次你的电子表格重新计算时它都会返回一个新的随机整数。
例如,要生成10到50之间的随机整数(包括10和50),请使用以下RANDBETWEEN公式。
=randbetween(10, 50)
Excel中的RANDBETWEEN函数可以创建正数和负数。 例如,为了得到一个从-10到10的随机整数列表,在工作表中输入以下公式。
=randbetween(-10, 10)
RANDBETWEEN函数在Excel 365-Excel 2007中可用。 在早期版本中,你可以使用上面例3中演示的RAND公式。
在本教程的后续部分,你会发现一些更多的公式例子,演示如何使用RANDBETWEEN函数来生成整数以外的随机值。
提示:在Excel 365和Excel 2021中,你可以使用动态数组RANDARRAY函数来返回你指定的任何两个数字之间的随机数组。
创建具有指定小数位的随机数
尽管Excel中的RANDBEETWEEN函数被设计为返回随机的整数,但你可以强迫它返回随机的小数,小数位数越多越好。
例如,为了得到一个小数点后一位的数字列表,你将底部和顶部的数值乘以10,然后再将返回的数值除以10。
RANDBETWEEN( 底值 * 10, 最高价值 * 10)/10下面的RANDBETWEEN公式返回1到50之间的随机十进制数字。
=介于(1*10, 50*10)/10之间的范围
以类似的方式,为了生成1到50之间的小数点后2位的随机数,你把RANDBETWEEN函数的参数乘以100,然后把结果也除以100。
=randbetween(1*100, 50*100) / 100
如何在Excel中生成随机日期
要返回给定两个日期之间的随机日期列表,请使用RANDBETWEEN函数与DATEVALUE结合使用。
randbetween(datevalue( 开始日期 ), DATEVALUE( 结束日期 ))例如,要获得2015年6月1日至2015年6月30日之间的日期列表,请在工作表中输入以下公式。
=RANDBETWEEN(DATEVALUE("1-Jun-2015"),DATEVALUE("30-Jun-2015"))
另外,你可以使用DATE函数来代替DATEVALUE。
=randbetween(date(2015,6,1),datevalue(2015,6,30))
记得对单元格应用日期格式,你将得到一个类似这样的随机日期列表。
对于一些高级选项,如生成随机的工作日或周末,请查看日期的高级随机发生器。
如何在Excel中插入随机时间
记住,在Excel内部系统中,时间是以小数形式存储的,你可以使用标准的Excel RAND函数来插入随机的实数,然后简单地将时间格式应用到单元格中。
为了根据你的标准返回随机时间,需要更具体的随机公式,如下图所示。
公式1.在指定范围内生成随机时间
要在你指定的任何两个时间之间插入随机时间,可以使用TIME或TIMEVALUE函数与Excel RAND结合使用。
时间( 开始时间 )+rand() * (时间( 开始时间 ) - 时间( 结束时间 )) TIMEVALUE( 开始时间 )+rand() * (timevalue( 开始时间 )-TIMEVALUE( 结束时间 ))例如,要在上午6:00和下午5:30之间插入一个随机时间,你可以使用以下任何一个公式。
=time(6,0,0) + rand() * (time(17,30,0) -time(6,0,0))
=timevalue("6:00 am") + rand() * (timevalue("5:30 pm") - timevalue("6:00 am")
公式2.生成随机日期和时间
要创建一个随机的列表 日期和时间 解释,使用RANDBETWEEN和DATEVALUE函数的组合。
randbetween(datevalue( 开始日期) , DATEVALUE( 结束日期 )) + randbetween(timevalue( 开始时间 ) * 10000, timevalue( 结束时间 ) * 10000)/10000假设你想在2015年6月1日至2015年6月30日之间插入随机日期,时间在上午7:30至下午6:00之间,下面的公式会很有效。
=RANDBETWEEN(DATEVALUE("1-Jun-2015", DATEVALUE("30-Jun-2015")) + RANDBETWEEN(TIMEVALUE("7:30 AM" ) * 10000, TIMEVALUE("6:00 PM" ) * 10000) / 10000
你也可以分别使用日期和时间函数提供日期和时间。
=randbetween(date(2015,6,1), date(2015,6,30)) + randbetween(time(7,30,0) * 10000, time(18,0,0) * 10000) / 10000
在Excel中生成随机字母
要返回一个随机字母,需要三个不同功能的组合。
=char(randbetween(code("a"),code("z")))
在哪里? A 是第一个字符,而 Z 是你想包括的字母范围内的最后一个字符(按字母顺序)。
在上述公式中。
- CODE为指定的字母返回数字的ANSI代码。
- RANDBETWEEN将CODE函数返回的数字作为范围的底部和顶部值。
- CHAR将RANDBETWEEN返回的随机ANSI代码转换为相应的字母。
注意:由于ANSI代码对大写和小写字符是不同的,这个公式是 区分大小写 .
如果有人把ANSI字符代码表记在心里,没有什么能阻止你直接向RANDBETWEEN函数提供代码。
例如,为了获得随机的 大写字母 之间 A (ANSI代码65)和 Z (ANSI代码90),你写。
=char(randbetween(65, 90))
为了产生 小写字母 从 a (ANSI代码97)到 z (ANSI代码122),你使用以下公式。
=char(randbetween(97, 122))
要插入一个随机的特殊字符,如 !" # $ % & ' ( ) * + , - . /。 使用RANDBETWEEN函数与 底部 参数设置为33(ANSI代码为"!"),并且 顶部 参数设置为47(ANSI代码为"/")。
=char(randbetween(33,47))
在Excel中生成文本字符串和密码
要在Excel中创建一个随机文本字符串,你只需将几个CHAR/RANDBEETWEEN函数连接起来。
例如,要生成一个由4个字符组成的密码列表,你可以使用类似这样的公式。
=RANDBETWEEN(0,9) & CHAR(RANDBETWEEN(65,90)) & CHAR(RANDBETWEEN(97, 122)) & CHAR(RANDBETWEEN(33,47))
为了使公式更加紧凑,我在公式中直接提供了ANSI代码。 这四个函数返回以下随机值。
徘徊在(0,9)之间
- 返回0到9之间的随机数。char(randbetween(65,90))
- 返回随机的UPPERCASE字母,介于 A 和 Z .char(randbetween(97, 122))
- 返回随机的小写字母,介于 a 和 z .char(randbetween(33,47))
- 返回随机的特殊字符。
用上述公式生成的文本字符串将是这样的:" 4Np # "或" 2Yu& ".
一句话,要小心! 如果你用类似的公式来创建随机密码,它们就不会很强。 当然,没有人说你不能通过连锁更多的CHAR / RANDBETWEEN函数来生成更长的文本字符串。 然而,它不可能随机化顺序或字符,即第一个函数总是返回一个数字,第二个函数返回一个大写字母,依此类推。
如果你正在寻找一个先进的随机密码生成器在Excel能够产生任何长度和模式的文本字符串,你可能想检查出测试字符串的高级随机发生器的能力。
另外,请记住,每次你的工作表重新计算时,用上述公式生成的文本字符串都会发生变化。 为了确保你的字符串或密码在创建后保持不变,你必须阻止RANDBETWEEN函数更新数值,这直接导致我们进入下一节。
如何防止RAND和RANDBETWEEN的重新计算
如果你想获得一组永久的随机数字、日期或文本字符串,在每次重新计算工作表时不会改变,请使用以下技术之一。
- 要阻止RAND或RANDBETWEEN函数在以下情况下重新计算 一个细胞 ,选择该单元格,切换到公式栏,按F9将公式替换成其值。
- 为了防止Excel随机函数重新计算,可以使用粘贴特殊>值功能。 选择所有带有随机公式的单元格,按Ctrl+C复制它们,然后右键单击所选范围,单击 粘贴专用 > 价值观 .
要了解更多关于这种 "冻结 "随机数的技术,请看如何用数值替换公式。
如何在Excel中生成唯一的随机数
Excel的两个随机函数都不能产生唯一的随机值。 如果你想创建一个随机数的列表 没有重复的 ,执行这些步骤。
- 使用RAND或RANDBETWEEN函数来生成一个随机数列表。 创建的数值要比你实际需要的多,因为有些是重复的,以后会被删除。
- 如上所述,将公式转换为数值。
- 通过使用Excel的内置工具或我们先进的Duplicate Remover for Excel来删除重复的值。
更多的解决方案可以在本教程中找到:如何生成没有重复的随机数。
Excel的高级随机数生成器
现在你知道了如何在Excel中使用随机函数,让我给你演示一个更快、更简单、不需要公式的方法,在你的工作表中创建一个随机数字、日期或文本字符串列表。
AbleBits Random Generator for Excel是作为Excel的RAND和RANDBETWEEN函数的一个更强大和用户友好的替代品而设计的。 它与所有版本的Microsoft Excel 2019、2016、2013、2010、2007和2003同样适用,并解决了标准随机函数的大多数质量和可用性问题。
AbleBits随机数发生器算法
在展示我们的随机生成器的行动之前,让我提供一些关于其算法的关键说明,以便你知道我们到底在提供什么。
- 用于Excel的AbleBits随机数生成器是基于Mersenne Twister算法的,该算法被认为是高质量伪随机化的工业标准。
- 我们使用MT19937版本,它产生了一个32位整数的正态分布序列,周期非常长,为2^19937-1,这对所有可以想象的情况来说都是绰绰有余的。
- 使用这种方法生成的随机数具有很高的质量。 随机数生成器已经成功地通过了多种统计随机性测试,包括著名的NIST统计测试套件和Diehard测试以及TestU01 Crush的一些随机性测试。
与Excel的随机函数不同,我们的随机数生成器创建了 永久随机值 在电子表格重新计算时不会改变。
如前所述,这个先进的Excel随机数生成器提供了一个无公式(因此无错误:)的方式来创建各种随机值,如。
- 随机整数或十进制数字,包括唯一的数字
- 随机日期(工作日、周末或两者,以及可选择的唯一日期)
- 随机文本字符串,包括给定长度和模式的密码,或通过掩码的方式。
- TRUE和FALSE的随机布尔值
- 从自定义列表中随机选择
现在,让我们看看随机数生成器的作用,正如承诺的那样。
在Excel中生成随机数
使用AbleBits随机数发生器,创建一个随机数列表就像点击 生成 按钮。
生成唯一的随机整数
你所要做的就是选择要用随机整数填充的范围,设置底部和顶部的数值,并且可以选择检查 独特的价值 箱子。
生成随机实数(小数)。
以类似的方式,你可以在你指定的范围内生成一系列的随机小数。
在Excel中创建随机日期
对于日期,我们的随机号码生成器提供以下选项。
- 生成特定时间段的随机日期--你输入底部日期在 来自 框中的日期,以及在 拟 箱子。
- 包括工作日、周末,或两者。
- 生成独特的日期。
生成随机文本字符串和密码
除了随机数字和日期,用这个随机生成器,你可以很容易地创建具有某些字符集的随机字母数字字符串。 最大字符串长度为99个字符,这允许生成真正强大的密码。
AbleBits随机数发生器提供的一个独特选项是创建 按掩码的随机文本字串 这是一个非常有用的功能,用于生成全球唯一标识符(GUID)、邮政编码、SKU等。
例如,为了得到一个随机的GUIDs列表,你选择十六进制字符集并在????????-????-????-????????????。 面罩 框,如截图所示。
如果你有兴趣给我们的随机生成器一个尝试,我们非常欢迎你在下面下载它作为我们的Excel终极套件的一部分。
可用的下载
随机公式示例(.xlsx文件)。
终极套房14天全功能版(.exe文件)