如何在Excel中生成总和处于固定范围的正整数随机数据集?
生成指定数量且总和在范围内的随机正整数(Excel解决方案)
嘿,我刚好处理过类似的需求,给你分享一个在Excel里完美实现的方案——以你提到的「生成10个随机正整数,总和落在25到100之间(包含边界)」为例,分两种场景说明:
适合Excel 365/2021的动态数组方案(一步到位)
如果你用的是支持动态数组(SPILL功能)的Excel版本,直接用下面的公式就能一次性生成10个符合要求的数,公式会自动填充到10个单元格里:
=LET( min_total, 25, // 你要求的总和最小值 max_total, 100, // 你要求的总和最大值 count, 10, // 需要生成的随机数数量 base, 1, // 每个数的最小值(正整数固定为1) min_extra, min_total - count*base, max_extra, max_total - count*base, extra, RANDBETWEEN(min_extra, max_extra), splits, SEQUENCE(count-1, 1, RANDBETWEEN(1, extra-1)), sorted_splits, SORT(VSTACK(0, splits, extra)), differences, DROP(sorted_splits, 1) - DROP(sorted_splits, -1), base + differences )
公式逻辑解释
- 先给每个数分配基础值
1(保证是正整数),10个数的基础总和是10 - 计算需要额外分配的数值范围:
25-10=15到100-10=90 - 随机选一个这个范围内的数作为额外分配的总数值
- 生成9个随机分割点,把额外数值拆成10份,分配给每个基础值,最终得到的就是总和在25-100之间的10个随机正整数
适合旧版Excel的非动态数组方案(辅助列方式)
如果你的Excel不支持动态数组,用辅助列的方式也能实现:
- 先在A1:A10单元格都输入
=1(保证每个数至少是1) - 在B1单元格输入
=RANDBETWEEN(15,90)(15是25-10,90是100-10,代表额外分配的总数值) - 在B2到B9单元格输入
=RANDBETWEEN(1, $B$1 - SUM($B$1:B1) - 1),这个公式会生成每个数的额外分配值,确保剩余数值足够分配给后面的单元格 - 在B10单元格输入
=$B$1 - SUM($B$1:B9),拿到最后一个数的额外分配值 - 最后在C1:C10输入
=A1+B1,得到的就是符合要求的10个随机正整数
小提示
- 每次按
F9键就能重新生成一组符合条件的随机数 - 如果想要固定生成的数值,选中生成的数,右键选择「复制」,然后右键「粘贴为值」即可
- 你可以根据自己的需求修改公式里的
min_total、max_total、count参数,比如要生成5个数总和在10-20之间,就把对应参数改成10、20、5就行
内容的提问来源于stack exchange,提问作者Dori Othman




