用指定的数字和它们的出现次数自动填表。

问题描述 投票:1回答:1

我有一个困难的时间,试图找出如何强制谷歌Spreadsheet生成一行符合某些标准的数字。

例如,我有一列 "A",有50行。

我有一列 "A",有50行。现在我需要在这些行(或单元格,因为它只是一列)中填入一组数字,这些数字包括

  • "1"--15次出现
  • "2"-10次出现
  • "3"-20次出现
  • "4"-5次出现

出现次数是在我的列之外的另一个单元格中手工输入的。修改出现次数会自动改变A1-A50范围内的数字分布。

数字不需要排序,可以随机分布(更好!)。

我想象在 "A1 "中放入一个公式,在下面的另外50个单元格中生成数字。也许ARRAYFORMULA会有一定的作用。谁能帮我提个建议?

google-sheets google-sheets-formula google-sheets-api array-formulas
1个回答
2
投票

这是一种根据频率列表生成一组数字的方法。

=ArrayFormula(vlookup(row(indirect("a1:a"&sum(D:D)))-1,{sumif(row(C:C),"<="&row(C:C),D:D)-D:D,C:C},2))

然后如果你想随机化它们:

=ArrayFormula(sort(vlookup(row(indirect("a1:a"&sum(D:D)))-1,{sumif(row(C:C),"<="&row(C:C),D:D)-D:D,C:C},2),randarray(sum(D:D)),1))

enter image description here

EDIT

我可以用Sequence代替row(),并将Sumif中的条件改为"<",使之更加整洁。

=ArrayFormula(vlookup(sequence(sum(D:D),1,0),{sumif(row(C:C),"<"&row(C:C),D:D),C:C},2))

并且把Sumif中的条件改为"<

=ArrayFormula(sort(vlookup(sequence(sum(D:D),1,0),{sumif(row(C:C),"<"&row(C:C),D:D),C:C},2),randarray(sum(D:D)),1))
© www.soinside.com 2019 - 2024. All rights reserved.