VBA脚本使用特殊条件查找重复项

时间:2014-02-27 18:20:08

标签: excel vba excel-vba

我有一个包含大量记录的数据库,每个记录有5个字段,即INVOICE NUMBER,DATE,AMOUNT,SHIPMENT NUMBER和QUANTITY。

如何编写搜索重复项的VBA脚本。搜索重复项的方法是,如果记录的任何三个字段匹配,则记录以单独的颜色突出显示。未指定要匹配的字段,它们可以是任何三个字段。

例如,如果INVOICE NUMBER,SHIPMENT NUMBER和QUANTITY在某些记录中匹配,则显示为重复并突出显示。同样,如果INVOICE NUMBER,QUANTITY和DATE在几条记录中匹配,那么它们也会被列为重复记录。

因此,在数据库中,如果任何3个匹配,则在5个字段中,它们将被列为重复项并以不同颜色突出显示。

任何人都可以帮我写一个VBA脚本吗?

1 个答案:

答案 0 :(得分:0)

没有一种简单的方法可以做到这一点。有五个字段,有10种可能的方法可以评估其中任何3个字段。因此,您可以创建一个基本上遍历所有列的宏,搜索重复项,但这不会很容易。

过去我做过类似的事情,但是依靠单元格中的公式来完成工作。我使用SUMPRODUCT函数来查找值。这就是你的样子。

=SUMPRODUCT((A$2:A2=A3)*(B$2:B2=B3)*(C$2:C2=C3)) + SUMPRODUCT((A$2:A2=A3)*(B$2:B2=B3)*(D$2:D2=D3)) + + SUMPRODUCT((A$2:A2=A3)*(B$2:B2=B3)*(E$2:E2=E3)) + SUMPRODUCT((A$2:A2=A3)*(C$2:C2=C3)*(D$2:D2=D3)) + SUMPRODUCT((A$2:A2=A3)*(C$2:C2=C3)*(E$2:E2=E3)) + SUMPRODUCT((A$2:A2=A3)*(D$2:D2=D3)*(E$2:E2=E3)) + SUMPRODUCT((B$2:B2=B3)*(C$2:C2=C3)*(D$2:D2=D3)) + SUMPRODUCT((B$2:B2=B3)*(C$2:C2=C3)*(E$2:E2=E3)) + SUMPRODUCT((B$2:B2=B3)*(D$2:D2=D3)*(E$2:E2=E3)) + SUMPRODUCT((C$2:C2=C3)*(D$2:D2=D3)*(E$2:E2=E3))

请注意,这假设您的5个字段位于A到E列中,并且永远不会更改。上面的公式也被设计为放在你想要的任何列的第2行。然后只需复制公式,让它自动调整当前行的值。第2行不需要它,因为那应该是你的第一个记录(假设当然有标题)。

哦,因为我没有提到它,如果这个公式返回1,则表示重复数据。 0表示它是唯一的(到目前为止)。

这是一些帮助创建宏的伪代码。

For each row from 2 to currentRow - 1
   Dim numMatches as integer
   numMatches = 0
   if activeSheet.Range("A" & row) = activeSheet.Range("A" & currentRow) then
      nuMatches = numMatches + 1
   Endif
   'do the above if statement for each compare
   if numMatches >= 3 then
      'format the currentRow to indicate duplicate
   endif
Next Row