我有以下功能
=IF(RAND()<0.25,1,0)
RAND()以十进制格式返回介于0到1之间的任何值,并且想法是一个项目有25%的几率获得1.如果它小于0.25,则rand()然后是一个命中并得到一个1,否则为0.现在让我说我需要这样做100次并将所有'1'的总和加起来,在这种情况下,平均为25%左右。 如何在Google电子表格中执行此操作?
基本上寻找一种方法来重复一个函数n次并总结结果。
我到处寻找(youtube,谷歌论坛)并且没有找到任何解决方案。
答案 0 :(得分:2)
我也可以把它作为一个答案,因为它试图解决一个更广泛的问题,即你是否可以重复一次(比如说)100次。答案是,是的,如果该函数与数组公式兼容。兰德不能以这种方式使用,因为它没有采取任何论据(由于某些原因,也没有其他功能,如countifs)。但是你可以通过使用Rand之二来代替并为它提供100个数组元素。这些乘以零因此实际上不会影响答案,但Google表格仍会对该函数进行100次评估:
ArrayFormula(sum(if(randbetween(0,A1:A100*0+99)<25,1,0)))
或
=Sumproduct(if(randbetween(0,A1:A100*0+99)<25,1,0))
结果是每次强制重新计算时(通过更改A1:A100范围内的内容或设置文件 - &gt;电子表格设置 - &gt;(标签)计算 - &gt;重新计算到每分钟)它会在25左右给出答案。
为了使其更具弹性(允许A1:A100中的任何值包括错误值)可以尝试
=ArrayFormula(sum(if(randbetween(0,iferror(A1:A100/0,0)+99)<25,1,0)))
或
=Sumproduct(if(randbetween(0,iferror(A1:A100/0,0)+99)<25,1,0))
我不知道为什么我一开始就没有这样做
=ArrayFormula(sum(if(randbetween(0,row(A1:A100)*0+99)<25,1,0)))
然后这很容易允许变量范围
=ArrayFormula(sum(if(randbetween(0,row(indirect("A1:A"&H1))*0+99)<25,1,0)))
其中H1中的数字不必限制在工作表中的行数。
答案 1 :(得分:0)
好的,所以我找到了一个非常复杂的答案。如果有人发现更好,请告诉我。
第一件事是用户|&#39; - &#39; |评论是在单独的工作表上创建一个范围。
因为我知道我不会同时查找超过200个值,所以我创建的范围是该公式的200长。
=IF(RAND()<0.25,1,0)
这将创建随机值的初始列表。
下一步是您需要生成随机化器种子。这基本上是您创建的范围之间的随机数。您可以使用
执行此操作=RANDBETWEEN(1,200)
这应该与您稍后要总结的内容位于同一列。
接下来,您要创建一个动态字符串,稍后可以通过arrayFormula访问该字符串。
="Randomizer!B"&B12&":B"&B12+B3
在我的情况下,我在名为randomizer的工作表上有200个随机数字。请注意&amp;,这是连接字符串的方式。在我的例子中,B12是=RANDBETWEEN(1,200)
的引用,B3是我想要随机发生的次数。它可以是任何值,只要它比随机化器种子小你希望它是随机的次数。
最后使用=SUM(ARRAYFORMULA(INDIRECT(B13)))
引用此字符串, indirect允许您将字符串称为单元格,这就是我能够创建动态范围来计算的方法。< / p>
我会说这种方法的优点是计算速度超快,因为已经预先计算了随机数。
这个想法是,它将继续从您创建的预先计算的随机数中创建随机范围,然后对这些范围求和,基本上计算n次的随机数。
希望这有助于某人。