用RAND和RANDBETWEEN函数在Excel中生成随机数

  • Share This
Michael Brown

本教程解释了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的重新计算

    如果你想获得一组永久的随机数字、日期或文本字符串,在每次重新计算工作表时不会改变,请使用以下技术之一。

    1. 要阻止RAND或RANDBETWEEN函数在以下情况下重新计算 一个细胞 ,选择该单元格,切换到公式栏,按F9将公式替换成其值。
    2. 为了防止Excel随机函数重新计算,可以使用粘贴特殊>值功能。 选择所有带有随机公式的单元格,按Ctrl+C复制它们,然后右键单击所选范围,单击 粘贴专用 > 价值观 .

    要了解更多关于这种 "冻结 "随机数的技术,请看如何用数值替换公式。

    如何在Excel中生成唯一的随机数

    Excel的两个随机函数都不能产生唯一的随机值。 如果你想创建一个随机数的列表 没有重复的 ,执行这些步骤。

    1. 使用RAND或RANDBETWEEN函数来生成一个随机数列表。 创建的数值要比你实际需要的多,因为有些是重复的,以后会被删除。
    2. 如上所述,将公式转换为数值。
    3. 通过使用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文件)

    Michael Brown is a dedicated technology enthusiast with a passion for simplifying complex processes using software tools. With more than a decade of experience in the tech industry, he has honed his skills in Microsoft Excel and Outlook, as well as Google Sheets and Docs. Michael's blog is dedicated to sharing his knowledge and expertise with others, providing easy-to-follow tips and tutorials for improving productivity and efficiency. Whether you're a seasoned professional or a beginner, Michael's blog offers valuable insights and practical advice for getting the most out of these essential software tools.