巧妙地检查VBA中的值是否满足阈值

时间:2015-08-21 03:10:03

标签: excel vba excel-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中执行此操作,使其基本上返回一个布尔值,取决于最后一行中的比率是否违反上面定义的阈值?

enter image description here

1 个答案:

答案 0 :(得分:1)

您可以使用AGGREGATE¹ function's SMALL sub-functionLARGE sub-function轻松实现最低和最高比率(使用条件)。

Minimum Maximum Ratios with criteria

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 )来轻松检索第二,第三等比率后端)。

我已稍微修改了示例中的某些值,以证明正确选取了带有条件的最小值和最大值。

这些可以通过WorksheetFunction objectApplication.Evaluate method适应VBA。

¹ Excel 2010引入了AGGREGATE¹ function's。在以前的版本中不可用。