Excel RANDARRAY函数--快速生成随机数的方法

  • Share This
Michael Brown

该教程展示了如何生成随机数、对列表进行随机排序、获得随机选择和随机分配数据到组。 所有这些都是用一个新的动态数组函数--RANDARRAY。

你可能知道,Microsoft Excel已经有几个随机化函数--RAND和RANDBETWEEN。 引入另一个函数有什么意义呢? 简而言之,因为它的功能要强大得多,可以取代这两个老函数。 除了设置你自己的最大值和最小值,它可以让你指定填充多少行和多少列,是否产生随机小数或与其他函数一起使用,RANDARRAY甚至可以对数据进行洗牌并挑选出一个随机样本。

    Excel RANDARRAY函数

    Excel中的RANDARRAY函数返回一个在你指定的任何两个数字之间的随机数字数组。

    它是Microsoft Excel 365中引入的六个新的动态数组函数之一。 其结果是一个动态数组,自动溢出到指定的行和列的数量。

    该函数的语法如下,请注意,所有的参数都是可选的。

    RANDARRAY([行], [列], [最小], [最大], [整数] )

    在哪里?

    行数 (可选) - 定义了要填充的行数。 如果省略,默认为1行。

    专栏 (可选) - 定义了要填充的列数。 如果省略,默认为1列。

    闵行区 (可选) - 要产生的最小的随机数。 如果不指定,则使用默认的0值。

    最大 (可选) - 要创建的最大随机数。 如果不指定,则使用默认的1值。

    整数 (可选) - 决定返回什么样的值。

    • 真--整数
    • FALSE或省略(默认)--十进制数字

    RANDARRAY函数--需要记住的事情

    要在Excel工作表中有效地生成随机数,有6个要点需要注意。

    • RANDARRAY函数仅在Excel for Microsoft 365和Excel 2021中可用。 在Excel 2019、Excel 2016和早期版本中,RANDARRAY函数不可用。
    • 如果RANDARRAY返回的数组是最终结果(在单元格中输出,而不是传递给另一个函数),Excel会自动创建一个动态溢出区,并用随机数填充它。 所以,要确保在你输入公式的单元格下面和/或右边有足够的空单元格,否则会发生#SPILL错误。
    • 如果没有指定任何参数,RANDARRAY()公式会返回一个介于0和1之间的单一十进制数字。
    • 如果 行数 或/和 专栏 参数用小数表示,它们将被截断为小数点前的整数(例如,5.9将被视为5)。
    • 如果 最大 参数没有定义,RANDARRAY的默认值分别为0和1。
    • 与其他随机函数一样,Excel RANDARRAY是 挥发性 为了防止这种情况发生,你可以通过使用Excel的 粘贴专用 > 价值观 功能。

    基本的Excel RANDARRAY公式

    现在,让我向你展示一个随机的Excel公式的最简单形式。

    假设你想用任何随机数填充一个由5行3列组成的范围。 要做到这一点,请这样设置前两个参数。

    • 行数 是5,因为我们想把结果放在5行里。
    • 专栏 是3,因为我们想把结果分成3列。

    所有其他参数我们都保留其默认值,得到以下公式。

    =randarray(5, 3)

    在目标区域(在我们的例子中是A2)的左上角单元格中输入,按回车键,你将会得到分布在指定行和列的结果。

    正如你在上面的截图中所看到的,这个基本的RANDARRAY公式用0到1的随机小数来填充范围。如果你想得到特定范围内的整数,那么就按照进一步的例子中所展示的配置最后三个参数。

    如何在Excel中随机化--RANDARRAY公式实例

    下面你会发现一些高级公式,这些公式涵盖了Excel中典型的随机化情况。

    在两个数字之间生成随机数

    要创建一个特定范围内的随机数列表,在第3个参数中提供最小值,在第4个参数中提供最大值。 根据你需要的是整数还是小数,将第5个参数分别设置为TRUE或FALSE。

    作为一个例子,让我们用1到100的随机整数填充一个6行4列的范围。 为此,我们设置了RANDARRAY函数的以下参数。

    • 行数 是6,因为我们想把结果分成6行。
    • 专栏 是4,因为我们想把结果分成4列。
    • 闵行区 是1,这是我们希望得到的最小值。
    • 最大 是100,这是要产生的最大值。
    • 整数 为真,因为我们需要整数。

    把这些论点放在一起,我们得到这个公式。

    =randarray(6, 4, 1, 100, true)

    并产生以下结果。

    在两个日期之间生成随机日期

    在Excel中寻找一个随机日期生成器? RANDARRAY函数是一个简单的解决方案!你所要做的就是在预定义的单元格中输入较早的日期(日期1)和较晚的日期(日期2),然后在公式中引用这些单元格。

    RANDARRAY(rows, columns, 日期1 , 日期2 , TRUE)

    在这个例子中,我们用这个公式在D1和D2的日期之间创建了一个随机日期列表。

    =randarray(10, 1, d1, d2, true)

    当然,如果你想的话,没有什么可以阻止你直接在公式中提供最小和最大日期。 只要确保你以Excel能理解的格式输入它们。

    =randarray(10, 1, "1/1/2020", "12/31/2020", true)

    为了防止错误,你可以使用日期功能来输入日期。

    =randarray(10, 1, date(2020,1,1), date(2020,12,31), true)

    注意:Excel内部将日期存储为序列号,所以公式结果很可能显示为数字。 为了正确显示结果,应用 日期 格式到溢出范围内的所有单元格。

    在Excel中生成随机工作日

    为了产生随机工作日,在WORKDAY的第一个参数中嵌入RANDARRAY函数,像这样。

    WORKDAY(RANDARRAY(rows, columns, 日期1 , 日期2 , TRUE), 1)

    RANDARRAY将创建一个随机开始日期的数组,WORKDAY函数将向其添加一个工作日,并确保所有返回的日期都是工作日。

    日期1在D1,日期2在D2,下面是产生10个工作日列表的公式。

    =workday(randarray(10, 1, d1, d2, true), 1)

    与前面的例子一样,请记住将溢出范围的格式定为 日期 以使结果正确显示。

    如何生成没有重复的随机数

    虽然现代Excel提供了6个新的动态数组函数,但不幸的是,仍然没有内置的函数来返回没有重复的随机数。

    要建立你自己的 独特的随机数发生器 在Excel中,你将需要把几个函数连在一起,如下图所示。

    随机整数 :

    index(unique(randarray( n *2, 1, , 最大 , true)), sequence( n ))

    随机小数 :

    index(unique(randarray( n *2, 1, , 最大 , false)), sequence( n ))

    在哪里?

    • N 是你希望生成多少个值。
    • 闵行区 是最低值。
    • 最大 是最高值。

    例如,要产生10个没有重复的随机整数,使用这个公式。

    =index(unique(randarray(20, 1, 1, 100, true)), sequence(10))

    要创建一个由10个独特的 随机十进制数字 ,在RANDARRAY函数的最后一个参数中将TRUE改为FALSE,或者干脆省略这个参数。

    =index(unique(randarray(20, 1, 1, 100, false)), sequence(10))

    提示和说明。

    • 该公式的详细解释可以在《如何在Excel中生成无重复的随机数》中找到。
    • 在Excel 2019和更早的版本中,RANDARRAY函数不可用。 相反,请查看此解决方案。

    如何在Excel中随机排序

    要在Excel中对数据进行洗牌,使用RANDARRAY作为 "sort by "阵列( by_array ROWS函数将计算你的数据集中的行数,表明要生成多少个随机数。

    SORTBY( 数据 , randarray(rows( 数据 )))

    通过这种方法,你可以 对一个列表进行随机排序 在Excel中,无论它包含数字、日期还是文本条目。

    =sortby(a2:a13, randarray(rows(a2:a13))

    此外,你还可以 洗行 而不混合你的数据。

    =sortby(a2:b10, randarray(rows(a2:b10))

    如何在Excel中获得一个随机选择

    要从一个列表中提取一个随机样本,这里有一个通用的公式可以使用。

    INDEX( 数据 , RANDARRAY( n , 1, 1, ROWS( 数据 ), TRUE))

    在哪里? n 是你希望提取的随机条目的数量。

    例如,要从A2:A10的列表中随机选择3个名字,使用这个公式。

    =index(a2:a10, randarray(3, 1, 1, rows(a2:a10), true))

    或者在某个单元格中输入所需的样本量,例如C2,并引用该单元格。

    =index(a2:a10, randarray(c2, 1, 1, rows(a2:a10), true))

    这个公式如何运作。

    这个公式的核心是RANDARRAY函数,它创建了一个随机的整数数组,C2中的值定义了生成多少个值。 最小的数字是硬编码的(1),最大的数字对应于你的数据集中的行数,这是由ROWS函数返回。

    随机整数的数组直接进入到 行数_num 对于上面截图中的样本,它是。

    =index(a2:a10, {8;7;4})

    提示:当从一个小的数据集中挑选一个大的样本时,你的随机选择有可能包含不止一个相同的条目,因为不能保证RANDARRAY只产生唯一的数字。 为了防止这种情况发生,使用这个公式的一个无重复版本。

    如何在Excel中选择随机行

    如果你的数据集包含一个以上的列,那么指定哪些列要包括在样本中。 为此,为最后一个参数提供一个数组常数( 列_num )的INDEX函数,像这样。

    =index(a2:b10, randarray(d2, 1, 1, rows(a2:a10), true), {1,2})

    其中A2:B10为源数据,D2为样本量。

    结果,我们的随机选择将包含两列数据。

    提示:就像前面的例子一样,这个公式可能会返回重复的记录。 为了确保你的样本没有重复的记录,使用一个稍微不同的方法,在如何选择没有重复的随机行中描述。

    如何在Excel中随机分配数字和文本

    要在Excel中进行随机分配,可以这样使用RANDBETWEEN和CHOOSE函数。

    选择(randarray(rows( 数据 ), 1, 1, n , TRUE)。 价值1 , 价值2 ,...)

    在哪里?

    • 数据 是你想分配随机值的源数据的一个范围。
    • N 是要分配的值的总数。
    • 价值1 , 价值2 , 价值3 ,等等是要随机分配的值。

    例如,要给A2:A13的参与者分配1到3的数字,请使用这个公式。

    =choose(randarray(rows(a2:a13), 1, 1, 3, true), 1, 2, 3)

    为方便起见,你可以在不同的单元格中输入要分配的值,比如从D2到D4,并在公式中引用这些单元格(单独的,而不是作为一个范围)。

    =choose(randarray(rows(a2:a13), 1, 1, 3, true), d2, d3, d4)

    结果是,你将能够用相同的公式随机分配任何数字、字母、文本、日期和时间。

    注意:RANDARRAY函数会随着工作表的每一次变化而不断生成新的随机值,因此每次都会有新的数值被分配。 要 "修复 "被分配的数值,请使用 "粘贴特殊>值 "功能,用其计算值替换公式。

    这个公式如何运作

    这个解决方案的核心仍然是RANDARRAY函数,它根据你指定的最小和最大数字(在我们的例子中是从1到3)产生一个随机整数数组。 ROWS函数告诉RANDARRAY要产生多少个随机数。 这个数组被送到 index_num 例如,选择函数的参数。

    =choose({1;2;1;2;3;2;3;3;1;3;1;2}, d2, d3, d4)

    指数_编号 是决定返回值的位置的参数。 因为位置是随机的,所以D2:D4中的值是按随机顺序挑选的。 对,就是这么简单 :)

    如何将数据随机分配给小组

    当你的任务是将参与者随机分配到各组时,上述公式可能不适合,因为它不能控制某个组被选择的次数。 例如,5个人可能被分配到A组,而只有2个人被分配到C组。 为了进行随机分配 均匀地 ,以便每组有相同数量的参与者,你需要一个不同的解决方案。

    首先,你通过使用这个公式生成一个随机数的列表。

    =randarray(rows(a2:a13))

    其中A2:A13是你的源数据。

    然后,你通过使用这个通用公式来分配组(或其他东西)。

    INDEX( 价值分配 , roundup(rank( 首个随机数(first_random_number , 随机数字范围 )/ n , 0))

    在哪里? n 是组的大小,即每个值应该被分配的次数。

    例如,要将人们随机分配到E2:E5中所列的小组,使每组有3名参与者,请使用这个公式。

    =index($e$2:$e$5, roundup(rank(b2,$b$2:$b$13)/3, 0))

    请注意,这是一个普通的公式(不是动态数组公式!),所以你需要像上面的公式那样用绝对引用锁定范围。

    在最上面的单元格(本例中为C2)中输入公式,然后根据需要向下拖动到多个单元格。 结果将类似于这样。

    请记住,RANDARRAY函数是不稳定的。 为了防止每次你在工作表中改变某些东西时产生新的随机值,请用以下方法将公式和它们的值替换掉 粘贴专用 功能。

    这个公式如何运作。

    帮助列中的RANDARRAY公式非常简单,几乎不需要解释,所以让我们关注C列的公式。

    =index($e$2:$e$5, roundup(rank(b2,$b$2:$b$13)/3, 0))

    RANK函数将B2中的数值与B2:B13中的随机数数组进行排序,结果是1与参与者总数(在我们的例子中为12)之间的数字。

    等级除以组的大小(在我们的例子中是3),然后ROUNDUP函数将其四舍五入到最接近的整数。 这个操作的结果是一个介于1和组的总数(在这个例子中是4)的数字。

    整数去到 行数_num 参数,迫使它从E2:E5范围内的相应行中返回一个值,该行代表指定的组。

    Excel RANDARRAY函数不工作

    当你的RANDARRAY公式返回一个错误时,这些是最明显的检查原因。

    #SPILL错误

    与其他动态数组函数一样,#SPILL!错误最常意味着在预定的溢出范围内没有足够的空间来显示所有的结果。 只要清除这个范围内的所有单元格,你的公式就会自动重新计算。 更多信息,请参见Excel #SPILL错误--原因和解决方法。

    #VALUE错误

    在这些情况下可能会出现#VALUE!错误。

    • 如果一个 最大 值小于一个 价值。
    • 如果任何一个参数是非数字性的。

    #NAME错误

    在大多数情况下,#NAME!错误表明以下情况之一。

    • 该函数的名称拼错了。
    • 该功能在你的Excel版本中不可用。

    #CALC!错误

    如果出现以下情况,就会出现#CALC!错误 行数 专栏 参数小于1或指的是一个空白单元格。

    这就是如何用新的RANDARRAY函数在Excel中建立一个随机数生成器。 感谢你的阅读,希望下周在我们的博客上见到你!

    供下载的实践工作手册

    RANDARRAY公式实例(.xlsx文件)。

    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.