You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在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. 先给每个数分配基础值1(保证是正整数),10个数的基础总和是10
  2. 计算需要额外分配的数值范围:25-10=15100-10=90
  3. 随机选一个这个范围内的数作为额外分配的总数值
  4. 生成9个随机分割点,把额外数值拆成10份,分配给每个基础值,最终得到的就是总和在25-100之间的10个随机正整数

适合旧版Excel的非动态数组方案(辅助列方式)

如果你的Excel不支持动态数组,用辅助列的方式也能实现:

  1. 先在A1:A10单元格都输入=1(保证每个数至少是1)
  2. 在B1单元格输入=RANDBETWEEN(15,90)(15是25-10,90是100-10,代表额外分配的总数值)
  3. 在B2到B9单元格输入=RANDBETWEEN(1, $B$1 - SUM($B$1:B1) - 1),这个公式会生成每个数的额外分配值,确保剩余数值足够分配给后面的单元格
  4. 在B10单元格输入=$B$1 - SUM($B$1:B9),拿到最后一个数的额外分配值
  5. 最后在C1:C10输入=A1+B1,得到的就是符合要求的10个随机正整数

小提示

  • 每次按F9键就能重新生成一组符合条件的随机数
  • 如果想要固定生成的数值,选中生成的数,右键选择「复制」,然后右键「粘贴为值」即可
  • 你可以根据自己的需求修改公式里的min_totalmax_totalcount参数,比如要生成5个数总和在10-20之间,就把对应参数改成10、20、5就行

内容的提问来源于stack exchange,提问作者Dori Othman

火山引擎 最新活动