通过分组数据减少行数

时间:2013-04-09 14:00:04

标签: excel excel-vba vba

我有一组电子表格,用于定义一组业务规则。然后,我们的系统会处理这些业务规则。

创建电子表格的用户非常天真,我发现通过跨行分解数据 - 从而减少规则数量 - 极大地提高了系统的性能。

其中一个“天真”结构化的电子表格可能如下所示:

+-----------+------------+------------+------------+------------+--------+
| Rule Name | Criteron 1 | Criteron 2 | Criteron 3 | Criteron 4 | Accept |
+-----------+------------+------------+------------+------------+--------+
| Rule 1    |      A     |      B     |      C     |            |  Yes   |
| Rule 2    |      A     |      C     |      C     |            |  Yes   |
| Rule 3    |      A     |      D     |      C     |            |  Yes   |
| Rule 4    |      A     |      E     |      C     |            |  Yes   |
| Rule 5    |      A     |      F     |      C     |            |  Yes   |
| Rule 6    |      A     |      B     |      D     |            |  Yes   |
| Rule 7    |      A     |      C     |      D     |            |  Yes   |
| Rule 8    |      A     |      D     |      D     |            |  Yes   |
| Rule 9    |      A     |      E     |      D     |            |  Yes   |
| Rule 10   |      A     |      F     |      D     |            |  Yes   |
| Rule 11   |      A     |      B     |      E     |            |  Yes   |
| Rule 12   |      A     |      C     |      E     |            |  Yes   |
| Rule 13   |      A     |      D     |      E     |            |  Yes   |
| Rule 14   |      A     |      E     |      E     |            |  Yes   |
| Rule 15   |      A     |      F     |      E     |            |  Yes   |
| Rule 16   |            |            |            |     G      |  Yes   |
| Rule 17   |            |            |            |     H      |  Yes   |
| Rule 18   |            |            |            |     I      |  Yes   |
| Rule 19   |            |            |            |     J      |  Yes   |
| Rule 20   |            |            |            |     K      |  Yes   |
| Rule 21   |            |            |            |     L      |  Yes   |
| Rule 22   |            |            |            |     M      |  Yes   |
| Rule 23   |            |            |            |     N      |  No    |
| Rule 24   |            |            |            |     O      |  No    |
| Rule 25   |            |            |            |     P      |  No    |
| Rule 26   |            |            |            |     Q      |  No    |
| Rule 27   |            |            |            |     R      |  No    |
| Rule 28   |            |            |            |     S      |  No    |
| Rule 29   |      A     |      J     |      F     |            |  No    |
| Rule 30   |      A     |      K     |      F     |            |  No    |
+-----------+------------+------------+------------+------------+--------+

例如,规则1将被评估为:

IF (Criterion 1 == A) AND (Criterion 2 == B) AND (Criterion 3 == C) THEN Accept

使用一点思考并假设我们可以在列中使用OR条件,上面的内容可以简化为:

+-----------+------------+------------+------------+-------------+--------+
| Rule Name | Criteron 1 | Criteron 2 | Criteron 3 | Criteron 4  | Accept |
+-----------+------------+------------+------------+-------------+--------+
| Rule 1    |      A     |  B,C,D,E,F |    C,D,E   |             |  Yes   |
| Rule 2    |            |            |            |G,H,I,J,K,L,M|  Yes   |
| Rule 3    |            |            |            |N,O,P,Q,R,S  |  No    |
| Rule 4    |      A     |     J,K    |      F     |             |  No    |
+-----------+------------+------------+------------+-------------+--------+

现在评估规则1如下:

IF (Criterion 1 == A) AND 
   (Criterion 2 == B OR Criterion 2 == C OR...) AND 
   (Criterion 3 == C OR Criterion 3 == D OR...) THEN Accept

现在,我已经手动完成了这项工作。我想知道的是:Excel是否具有内置功能,可以为我执行此类分组。如果没有,有人能指出我的算法方向,这将有助于我有效地实现这一点吗?

1 个答案:

答案 0 :(得分:0)

这看起来像是一种情况,你可以使用ADO和OLE DB在SQL查询中使用GROUP BY HAVING将表格查询到ADO Recordset,然后使用 CopyFromRecordset将(分组)结果转储到新工作表中

或者,也许是数据透视表?