我想根据它自己的值减去给定的范围。比方说,例如,数字96-99有5%减少1到2,90-95有10%机会从2减少到4,85-89有15%机会减少4到6,等等。我使用兰特公式来选择一个范围内的数字,但如果数字越大,它就越好,它就不会发生变化的可能性越小。
答案 0 :(得分:1)
因为RAND()和RANDBETWEEN()是易失性函数,所以至少需要1个辅助单元格。此解决方案将引导您完成思考过程。最后,你将得到一个基于嵌套步骤的公式。
此解决方案基于您使用的数字是整数的假设。
构建一个由断点索引的参考表,如下所示。我按降序排列,以匹配您在问题中显示范围的方式。按升序排序索引没有错,但需要编辑公式。
这是我假设您的数字是整数的地方。我使用了RANDBETWEEN()这是一个易失性函数。这意味着每次工作表上的某些内容发生更改时,它都会重新计算。此外,如果需要在公式中多次引用此数字,则需要引用其单元格而不是嵌套RANDBETWEEN(),因为您可能最终处理数字之间的不同兰特,并且您的公式结果将不一致。
在E2中我使用了以下内容。
=RANDBETWEEN(0,99)
这是我们要检查的号码。
如果您的信息按升序编制索引,那么您可以在此处获得一些公式选项,例如VLOOKUP。由于正在使用的表按降序排列,我在F2中使用了以下内容并将其复制到G2和H2:
=INDEX($B$2:$D$21,IFERROR(MATCH($E2+1,$A$2:$A$21,-1)+1,1),COLUMN(A1))
在I2中使用以下volatile函数。如果只在公式中引用一次,则嵌套是安全的。
=RAND()
在J2中,我使用以下公式将randam百分比与某些时间的概率范围与步骤2中的数字进行比较。
=IF(I2<=F2,"subtract","do nothing")
在此阶段,无论是否需要,我们都会确定随机数量。虽然它在分解时是不必要的计算,但由于它无论如何计算,因此作为IF函数的一部分,它将仅在需要时进行计算。在K2中,我使用了以下内容:
=RANDBETWEEN(G2,H2)
在L2检查中是否需要减去,如果是,则减去适当的数量:
=E2-IF(J2="subtract",K2,0)
现在就是这个过程。通过将来自细胞的公式代入需要该细胞的公式,可以将其简化为单一的丑陋公式。在这种情况下,它可能看起来像这样:
=E3-IF(IF(RAND()<=INDEX($B$2:$D$21,IFERROR(MATCH($E3+1,$A$2:$A$21,-1)+1,1),COLUMN(A2)),"subtract","do nothing")="subtract",RANDBETWEEN(INDEX($B$2:$D$21,IFERROR(MATCH($E3+1,$A$2:$A$21,-1)+1,1),COLUMN(B2)),INDEX($B$2:$D$21,IFERROR(MATCH($E3+1,$A$2:$A$21,-1)+1,1),COLUMN(C2))),0)
现在真的很丑陋,很难检查它是否有效。这就是为什么如果你不需要把它全部塞进一个单元格中,最好把东西分成几部分。
你也可以稍微调整一下这个大丑陋的公式,看起来像下面这样只是一个稍微不那么大的丑陋公式:
=E3-IF(RAND()<=INDEX($B$2:$D$21,IFERROR(MATCH($E3+1,$A$2:$A$21,-1)+1,1),1),RANDBETWEEN(INDEX($B$2:$D$21,IFERROR(MATCH($E3+1,$A$2:$A$21,-1)+1,1),2),INDEX($B$2:$D$21,IFERROR(MATCH($E3+1,$A$2:$A$21,-1)+1,1),3)),0)