聪明的方法来检查VBA中的值是否达到阈值

免责声明:以下数字是随机产生的

我试图做的是,纯粹在VBA中,看看[B列] / [A列]的比率,并检查第10行(= 1,241 / 468)中的比率是否低于比率的最小值或高于行1至9中比率的最大值, 但仅与行C中1的行相比较。

也就是说,将Cell(B10)/ Cell(A10)与Cell(B2)/ Cell(A2),Cell(B3)/ Cell(A3)等进行比较(仅对C列为1的行进行比较)。

我正在使用的工作簿有更多的数据和列,我不能显式编辑单元格,所以定义一个新的列是不可能的。 有没有办法在VBA中这样做,它实质上返回一个布尔值,取决于最后一行的比例是否违反上面定义的阈值?

在这里输入图像描述

AGGREGATE¹函数的 SMALL子函数和LARGE子函数可以轻松实现最小和最大比率(使用标准)。

最小最大比率与标准

D13:E13中的公式是,

 =AGGREGATE(15, 6, ((B1:B9)/(A1:A9))/C1:C9, 1) =AGGREGATE(14, 6, ((B1:B9)/(A1:A9))/C1:C9, 1) 

6是忽略错误值的AGGREGATE参数。 通过将比率除以列C中的值,我们产生#DIV/0! 任何我们不希望被忽视的东西的错误。 如果C中的值更加多样化,我们可以用(C1:C9 = 1)除以得到相同的结果。

由于我们使用SMALL和LARGE子函数,我们可以通过增加k参数(后端1 )来轻松检索第二,第三等比例。

我已经稍微修改了一些示例中的值,以certificate带有标准的最小值和最大值正确拾取。

这些可以通过WorksheetFunction对象或Application.Evaluate方法适应VBA。

¹AGGREGATE¹函数是在Excel 2010中引入的,它在以前的版本中不可用。