我有一个包含大量记录的数据库,每个记录有5个字段,即INVOICE NUMBER,DATE,AMOUNT,SHIPMENT NUMBER和QUANTITY。
如何编写搜索重复项的VBA脚本。搜索重复项的方法是,如果记录的任何三个字段匹配,则记录以单独的颜色突出显示。未指定要匹配的字段,它们可以是任何三个字段。
例如,如果INVOICE NUMBER,SHIPMENT NUMBER和QUANTITY在某些记录中匹配,则显示为重复并突出显示。同样,如果INVOICE NUMBER,QUANTITY和DATE在几条记录中匹配,那么它们也会被列为重复记录。
因此,在数据库中,如果任何3个匹配,则在5个字段中,它们将被列为重复项并以不同颜色突出显示。
任何人都可以帮我写一个VBA脚本吗?
答案 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