=RANDBETWEEN(1,100) 返回 1 到 100 之间的随机整数,两端都包含在内。=RAND() 返回一个大于等于 0 且小于 1 的随机小数。每次表格重新计算时,两者都会给出新的数字。
| A | B | |
|---|---|---|
| 1 | Formula | Result |
| 2 | Decimal 0 to 1 | 0.256679579 |
| 3 | Whole 1 to 100 | 24 |
| 4 | Die roll | 4 |
| 5 | Coin | Tails |
编辑任意单元格(例如在 A6 中输入一个词),所有结果都会改变。在 Excel 中,工作簿任何地方的每次编辑都会这样,按 F9 则会强制生成一组新数字。你在这里看到的数字和其他读者看到的并不相同。
RAND 与 RANDBETWEEN 语法
=RAND()
=RANDBETWEEN(bottom, top)
RAND 没有参数,但空括号必须写。RANDBETWEEN 接收它可以返回的最小和最大整数;如果 bottom 大于 top,返回 #NUM!。
两个值之间的随机数
RANDBETWEEN 只返回整数。要在某个范围内生成随机小数,就对 RAND 做缩放:乘以范围的宽度,再加上最小值。外面套一层 ROUND 可以保留两位小数。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Min | Max | Kind | Random value |
| 2 | 10 | 50 | Whole | 46 |
| 3 | 10 | 50 | Decimal | 49.74 |
| 4 | 2026-01-01 | 2026-12-31 | Date | 2026-09-04 |
| 5 | -5 | 5 | Whole | -5 |
修改 A 列和 B 列中的最小值和最大值,结果会保持在新的范围内。日期在 Excel 中是整数,所以在两个日期之间用 RANDBETWEEN 会返回一个随机日期;把单元格设置为日期格式(开始 > 数字格式 > 短日期),否则会显示序列号。负数边界也同样适用。
RANDARRAY:一次生成多个随机数
在 Excel 365 和 Excel 2021 中,=RANDARRAY(rows, columns, min, max, whole_number) 从一个单元格填满整个区域。所有参数都是可选的:=RANDARRAY(5) 会在一列中向下给出 5 个 0 到 1 之间的小数。
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Whole numbers 1 to 100 | Decimals 0 to 1 | ||
| 2 | 64 | 23 | 31 | 0.040617832 |
| 3 | 83 | 89 | 55 | 0.480702855 |
| 4 | 95 | 78 | 92 | 0.305043489 |
| 5 | 4 | 36 | 92 | 0.133745562 |
| 6 | 44 | 73 | 64 | 0.581903097 |
A2 用整数填满 A2:C6(最后一个参数 TRUE 表示要整数;省略则生成小数)。Excel 2019 及更早版本没有 RANDARRAY:在一个单元格中写 =RANDBETWEEN(1,100),再把它填充到整个区域。
从列表中随机抽取一项
要随机抽取一个名字、产品或问题,先用 RANDBETWEEN 随机选一个位置,再用 INDEX 返回该位置上的项目。COUNTA 统计名字的个数,所以区域可以超出列表、延伸到空行:在下方添加名字后,=INDEX(A2:A100,RANDBETWEEN(1,COUNTA(A2:A100))) 依然有效。
| A | B | C | |
|---|---|---|---|
| 1 | Name | Winner | |
| 2 | Ana | Finn | |
| 3 | Ben | ||
| 4 | Cleo | ||
| 5 | Dan | ||
| 6 | Eve | ||
| 7 | Finn |
每个名字被抽中的概率相同,都是六分之一。两个使用这个公式的单元格可能抽到同一个名字;如果要抽出几个不同的获奖者,应该先打乱列表(见下一节),再取最上面几行。
打乱列表与不重复的随机数
=SORTBY(A2:A7,RANDARRAY(6)) 按六个随机数对列表排序,于是列表变成随机顺序。因为每一项只出现一次,结果永远不会重复,这是在 Excel 365 和 2021 中抽取多个不同名字或数字的标准方法。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Name | Shuffled | 3 of 1 to 20 | ||
| 2 | Ana | Finn | 8 | ||
| 3 | Ben | Ben | 3 | ||
| 4 | Cleo | Ana | 12 | ||
| 5 | Dan | Cleo | |||
| 6 | Eve | Eve | |||
| 7 | Finn | Dan |
E2 把 SEQUENCE 生成的 1 到 20 打乱,再用 TAKE 保留前三个,所以这三个数总是互不相同。TAKE 需要 Microsoft 365 或 Excel 2024;在 Excel 2021 中写 =INDEX(SORTBY(SEQUENCE(20),RANDARRAY(20)),SEQUENCE(3))。在 Excel 2019 中,在列表旁的辅助列里放 =RAND(),再用 数据 > 排序 按该列对列表排序。
动手试试:自己缩放随机值
RANDBETWEEN 就是把 RAND 缩放到某个范围再截成整数。这里 B2 中是 RAND 曾经返回的一个值,已经粘贴为值,所以不会再变化。
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Item | RAND value | Whole number | Min | Max |
| 2 | Draw 1 | 0.372 | 5 | 12 |
轮到你了: B2 中是 RAND 返回的值。在 C2 中像 RANDBETWEEN 那样把它变成从 D2 的最小值到 E2 的最大值(两端都包含)之间的整数:乘以可能取到的数的个数,用 INT 去掉小数,再加上最小值。
提示:从 5 到 12 共有 E2-D2+1 个可能的数,也就是 8 个。
常见错误:用过之后结果又变了
如果随机抽取的结果在下一次编辑时就变了,它就无法用来记录谁中了奖,或哪些行进入了样本。得到想要的数字后,就把它们转换成值:
- 选中这些单元格并复制(Ctrl+C,Mac 上是 Cmd+C)。
- 开始 > 粘贴 > 值。Windows 上依次按 Ctrl+Alt+V、V、Enter;Mac 上按 Ctrl+Cmd+V 并选择“值”。
如果只有一个单元格,按 F2 进入编辑,按 F9 把公式替换为当前结果,再按 Enter。如果每次都需要同样的“随机”数字,比如用于测试或课堂练习,Excel 没有种子参数:只需粘贴一次值并保留那张工作表。RAND 适合用于抽样、游戏和测试数据,但不适合用于密码或任何与安全相关的场景。
常见问题
Excel 中如何生成两个数之间的随机数?
整数用 =RANDBETWEEN(10,50),10 和 50 都可能出现。小数用 =RAND()*(50-10)+10,在 Excel 365 或 2021 中也可以用 =RANDARRAY(1,1,10,50)。
Excel 中如何让随机数不再变化?
用值替换公式:复制这些单元格,然后选择 开始 > 粘贴 > 值。Windows 上依次按 Ctrl+Alt+V、V、Enter 效果相同;Mac 上按 Ctrl+Cmd+V 打开“选择性粘贴”,在其中选择“值”。如果只有一个单元格,按 F2,再按 F9(某些笔记本上是 Fn+F9),然后按 Enter。
Excel 中如何从列表中随机抽取一个名字?
用 =INDEX(A2:A7,RANDBETWEEN(1,COUNTA(A2:A7)))。COUNTA 统计名字的个数,RANDBETWEEN 随机选一个位置,INDEX 返回该位置上的名字。
Excel 中如何生成不重复的随机数?
把一个序列打乱,再取前几个:在 Excel 365 中,=TAKE(SORTBY(SEQUENCE(50),RANDARRAY(50)),6) 给出 1 到 50 之间 6 个互不相同的数。Excel 2021 没有 TAKE,可以用 =INDEX(SORTBY(SEQUENCE(50),RANDARRAY(50)),SEQUENCE(6))。在多个单元格中使用 RANDBETWEEN 可能会出现重复。
Excel 中如何生成随机日期?
用 RANDBETWEEN 配合两个日期:=RANDBETWEEN(DATE(2026,1,1),DATE(2026,12,31)) 返回 2026 年中随机的一天。把单元格设置为日期格式,否则它会显示日期的序列号。