突出显示重复行

EDC*_*EDC -3 excel performance vba loops

我想突出显示 Excel VBA 中的重复行。假设我有以下示例表,其中包含 A、B、C 和 D 列用于测试:

 A       B       C       D (Strings)

 1       1       1       dsf
 2       3       5       dgdgdgdg
 1       1       1       dsf
 2       2       2       xxx
 6       3       4       adsdadad
 2       2       2       xxx
Run Code Online (Sandbox Code Playgroud)

重复的行应该以任何颜色突出显示,例如灰色。我理想地寻找快速执行的代码,因为它将用于相当大的表。请注意,有一些解决方案可用于突出显示重复的单元格(但不突出显示重复的行)。我不知道如何识别行是否重复,同时如何快速做到这一点,即没有嵌套循环。解决方案应该是 VBA(而不是 Excel)。

实现这一目标的最佳/最快方法是什么?

Vin*_*met 5

使用以下 sumproduct 公式(或 countifs)添加条件格式

=SUMPRODUCT(($A$1:$A$6&$B$1:$B$6&$C$1:$C$6=$A1&$B1&$C1)*1)>1

条件格式

解释

SUMPRODUCT可以方便地处理在检查条件之前需要操作的范围。在本例中,我连接整个范围内的 A、B 和 C 列,并将其与当前行的连接进行比较。SUM然后,我通过乘以 1 和条件为 true 的行的总和部分,将 TRUE/FALSE 数组转换为 1/0 数组SUMPRODUCT,从而得到重复的行(所有出现的情况)。如果您的范围较小,则使用公式评估您可以清楚地看到其工作原理。

这是一个快速修复,但性能并不理想,我经常使用它来检测重复项或生成序列号。

ponydeer建议的解决方案 - 更高的性能

根据排序建议,需要添加键列,放入自动过滤器并按键排序,然后对键列执行条件:

已排序

  • ++ 为解决方案。我自己可能使用过更高效的[COUNTIFS函数](https://support.office.com/en-us/article/COUNTIFS-function-53C4DC8E-0E5B-4E32-93DF-9CA5E7DA89ED);也许在定义 .CurrentRegion 的命名范围上。 (2认同)