筛选条件,然后在Excel中的countif语句中应用

时间:2018-09-19 01:27:15

标签: excel excel-vba excel-formula

我有一个这样的过滤条件表:

+----------+----------+------+------+------+
| Category | SpecName | Spec | Pass | Fail |
+----------+----------+------+------+------+
| A        | S1       |    3 |      |      |
| A        | S2       |    4 |      |      |
| B        | S1       |    5 |      |      |
| C        | S1       |    2 |      |      |
+----------+----------+------+------+------+

我有一个表,我想将过滤条件应用到这样的表上:

+----------+----+----+
| Category | S1 | S2 |
+----------+----+----+
| A        |  5 |  3 |
| B        |  4 |    |
| A        |  5 |  5 |
| C        |  2 |    |
| A        |  2 |  6 |
+----------+----+----+

我想用大于等于相应规格的值填充第二个表中的项数来过滤条件表中的通过和失败列,就像这样。

+----------+----------+------+------+------+
| Category | SpecName | Spec | Pass | Fail |
+----------+----------+------+------+------+
| A        | S1       |    3 |    1 |    2 |
| A        | S2       |    4 |    1 |    2 |
| B        | S1       |    5 |    0 |    1 |
| C        | S1       |    2 |    1 |    0 |
+----------+----------+------+------+------+

以下是如何使用脚本语言进行操作的步骤:

  1. 过滤第一张表,以获取该行上“类别”的所有规格过滤条件,如下所示。
+----------+----------+------+
| Category | SpecName | Spec |
+----------+----------+------+
| A        | S1       |    3 |
| A        | S2       |    4 |
+----------+----------+------+
  1. 将表2复制到变量 iTable
+----------+----+----+
| Category | S1 | S2 |
+----------+----+----+
| A        |  5 |  3 |
| B        |  4 |    |
| A        |  5 |  5 |
| C        |  2 |    |
| A        |  2 |  6 |
+----------+----+----+
  1. 对于每个规格名称:    在iTable中查找具有规范名称的列    按规范过滤 iTable 中的规范名称列
  2. 应用所有过滤器后,我们将:
+----------+----+----+
| Category | S1 | S2 |
+----------+----+----+
| A        |  5 |  5 |
+----------+----+----+
  1. 然后只对 iTable 中的行进行计数,并在条件表的 Pass 列中将其分配给单元格

使用Excel公式可以吗?

如果没有,是否有人知道如何使用VBA?

1 个答案:

答案 0 :(得分:1)

为您指定标准的替代布局。扩展列以适合您的需求。

Alt Table 1 Layout

将每个规格标准作为其自己的色谱柱寿命会非常容易。您只需要调整公式以匹配您拥有的条件数即可。

根据末尾的表格进行布局,将以下公式放在D3中,并根据需要向下复制。

=SUMPRODUCT(($G$2:$G$6=A3)*($H$2:$H$6>=B3)*($I$2:$I$6>=C3))

这将使您获得通过所有标准的机会。它也是执行类似于calcs的数组的功能。可以在下一列中重复进行此操作,但是为了减少对数组计算的依赖性,并可能根据要检查的数据量加快处理速度,请将以下内容放置在fail列的顶部,然后根据需要向下复制:

=COUNTIF($G$2:$G$6,A3)-D3

基本上,它从总数中减去通过次数。假设您只能将“通过”和“失败”作为选项。

POC