您可以使用RAND()
函数在A列生成N
个数字(在这种情况下是8个数字)。
然后,在B列中,您可以使用以下公式:B1=A1/SUM(A:A)*320
,B2=A2/SUM(A:A)*320
等等(其中320
是您感兴趣的总和)。
因此,您只需在A1中输入=RAND()
,然后将其向下拖动到A8。然后在B1中输入=A1/SUM(A:A)*320
,并将其拖到B8。现在,B1:B8包含8个随机数,它们的总和为320。
示例输出:
我来晚了 - 不过,如果只需要整数,则:
=LET(x_,RANDARRAY(8,1,1,1000000,1),y_,ROUND(x_*320/SUM(x_),0),y_)
与上面的喜爱解决方案有些相似,尽管简约(需要在单个单元格中使用公式来生成所需数组,没有帮助列)。也解决了不重要的小数点问题,尽管您可能需要重新分配因偶然四舍五入误差而导致的赤字/盈余,这可能会产生总和为321或319。可以再次随机地使用类似于上面公式中的index(y_,randbetween(1,8))+320-sum(y_)
的东西执行此操作 - 或者诉诸臭名昭著的辅助函数..
有人评论说上面的喜爱解决方案(因为它源自类似的概念/方法)不均匀 - 我不确定是否需要这样;均匀分布将妨碍随机性质(并且可以说要简单得多,因为您只需将一个大范围划分为不同的八分之一,并遵循已经在此处阐述的相同方法 - 不确定随意/机械地“强制”随机分布采用某种非随机分布的想法来自何处/为什么..无论如何...我显然没有正确阅读问题(咳咳)。
我有点晚了 - 但是如果只需要整数,则:
=LET(x_,RANDARRAY(8,1,1,1000000,1),y_,ROUND(x_*320/SUM(x_),0),y_)
这种解决方案与上面的最爱解决方案有些相似,虽然很简洁(只需要在单元格中使用公式即可生成所需的数组,不需要任何帮助列)。但它也解决了小数点问题,尽管由于偶发的舍入误差可能导致总和为321或319,因此您可能需要分配回赤字/盈余。您可以再次随机使用类似于上述公式中的index(y_,randbetween(1,8))+320-sum(y_)
的东西 - 或者诉诸于臭名昭著的helper fn ..
=320-sum(A1:A7)
,其中A1:A7
为前7个随机数。 - Dmitry Pavliv