如何根据电子表格中自己的值减去给定范围

时间:2017-09-28 04:14:12

标签: excel-formula

Sample sheet.

我想根据它自己的值减去给定的范围。比方说,例如,数字96-99有5%减少1到2,90-95有10%机会从2减少到4,85-89有15%机会减少4到6,等等。我使用兰特公式来选择一个范围内的数字,但如果数字越大,它就越好,它就不会发生变化的可能性越小。

1 个答案:

答案 0 :(得分:1)

因为RAND()和RANDBETWEEN()是易失性函数,所以至少需要1个辅助单元格。此解决方案将引导您完成思考过程。最后,你将得到一个基于嵌套步骤的公式。

此解决方案基于您使用的数字是整数的假设。

第1步 - 建立您的参考表

构建一个由断点索引的参考表,如下所示。我按降序排列,以匹配您在问题中显示范围的方式。按升序排序索引没有错,但需要编辑公式。

table

第2步 - 确定您的起始号码

这是我假设您的数字是整数的地方。我使用了RANDBETWEEN()这是一个易失性函数。这意味着每次工作表上的某些内容发生更改时,它都会重新计算。此外,如果需要在公式中多次引用此数字,则需要引用其单元格而不是嵌套RANDBETWEEN(),因为您可能最终处理数字之间的不同兰特,并且您的公式结果将不一致。

在E2中我使用了以下内容。

=RANDBETWEEN(0,99)

这是我们要检查的号码。

第3步 - 查找变更概率和关联范围

如果您的信息按升序编制索引,那么您可以在此处获得一些公式选项,例如VLOOKUP。由于正在使用的表按降序排列,我在F2中使用了以下内容并将其复制到G2和H2:

=INDEX($B$2:$D$21,IFERROR(MATCH($E2+1,$A$2:$A$21,-1)+1,1),COLUMN(A1))

第4步 - 生成随机%概率

在I2中使用以下volatile函数。如果只在公式中引用一次,则嵌套是安全的。

=RAND()

第5步 - 检查是否有事情发生

在J2中,我使用以下公式将randam百分比与某些时间的概率范围与步骤2中的数字进行比较。

=IF(I2<=F2,"subtract","do nothing")

步骤6 - 确定要减去的随机数量

在此阶段,无论是否需要,我们都会确定随机数量。虽然它在分解时是不必要的计算,但由于它无论如何计算,因此作为IF函数的一部分,它将仅在需要时进行计算。在K2中,我使用了以下内容:

=RANDBETWEEN(G2,H2)

步骤7 - 确定最终号码

在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)