建议宏在SINGLE列中查找重复项

时间:2012-02-27 17:33:01

标签: excel sorting excel-vba vba

发现了许多涉及在两列中找到重复项的问题:

即。 MS Excel how to create a macro to find duplicates and highlight them?excel mark duplicates values

但是我正在尝试调整代码以用于在一列中查找重复项。例如,这是一个数据集:

第1栏

Foo
酒吧
23
23
12
foo
酒吧
巴特

这就是我现在正在使用的:

Function warnDupes()

Dim lastRow As Long
Dim dict As Object

' Let Col be the column which warnDupes operates on.
Dim Col As String

Col = "A"

Set dict = CreateObject("scripting.dictionary")

lastRow = range(Col & Rows.Count).End(xlUp).Row

On Error Resume Next
For i = lastRow To 1 Step -1
    If dict.Exists(range(Col & i).value) = True Then

    'range("Y" & i).EntireRow.Delete

    MsgBox ("Hmm...Seems to be a duplicate of " & range(Col & i).value & _
    " in Cell " & Col & i)

End If
dict.Add range(Col & i).value, 1
Next

End Function

到目前为止,我已经有一些代码可以完成90%的工作。 23和23匹配。酒吧和酒吧相匹配。所以代码匹配字符串和Ints。但我希望宏能够将Foo和foo匹配为副本。如何让Excel忽略大小写?

这个问题(Function for detecting duplicates in Excel sheet)似乎相关但我无法修改代码或理解作者所做的事情。对代码,解释或建议的任何改进都将非常感激。

感谢。

更新

注意到一些非常奇怪的东西。

数据:

IB6061
IC6071

无论我使用我的宏还是使用Excel中的条件格式工具,都匹配

。有什么理由吗?

7 个答案:

答案 0 :(得分:6)

富兰克林

为什么不使用Excel公式?

如果值在Col A中,则在Cell B1中键入它并将其复制下来?

=IF(COUNTIF(A:A,A1)>1,"It is a duplicate","It is not a duplicate")

它也适用于“Foo”和“foo”

等案件

您还可以使用上述公式使用条件格式来突出重复项吗?

<强>后续

  
    

数据:

         

IB6061

         

IC6071

         无论我使用我的宏还是使用Excel中的条件格式工具,都匹配

         

有什么理由?

  

你使用什么公式?

这对我有用。突出显示Col A,然后使用此公式

=COUNTIF(A:A,A1)>1

查看快照

enter image description here SID

答案 1 :(得分:3)

在你的存在()&amp; .Add()行,使两个值都是相同的情况:

If dict.Exists(UCase$(Range(Col & i).Value)) Then

dict.Add UCase$(Range(Col & i).Value), 1

这样,重复项将始终以大写形式添加到字典中,因此案例永远不会重要。

答案 2 :(得分:2)

您可以将所有键放在小写字母中,例如:

Dim myKey as String

For i = lastRow To 1 Step -1
    myKey = UCase(range(Col & i).value)
    If dict.Exists(myKey) = True Then

    'range("Y" & i).EntireRow.Delete

    MsgBox ("Hmm...Seems to be a duplicate of " & range(Col & i).value & _
    " in Cell " & Col & i)

    Else
        dict.Add myKey, 1
    End If
Next i

答案 3 :(得分:2)

这对我有用

Excel 2007

Sub removeDuplicate(rg As Range, col as Integer)
    rg.RemoveDuplicates Columns:=col, Header:=xlYes
End Sub

Excel 2003

' Excel 2003
Option Explicit

Sub DeleteDups(range as String) 

    Dim x               As Long 
    Dim LastRow         As Long 

    ' Range "A65536" 
    LastRow = Range(range).End(xlUp).Row 
    For x = LastRow To 1 Step -1 
        If Application.WorksheetFunction.CountIf(Range("A1:A" & x), Range("A" & x).Text) > 1 Then 
            Range("A" & x).EntireRow.Delete 
        End If 
    Next x 

End Sub

答案 4 :(得分:0)

您可以添加

Option Compare Text

对于模块的非常顶级,该模块中的所有代码现在都将非区分大小写地比较文本。

CAT 猫 猫 CAT

......都会匹配。

答案 5 :(得分:0)

在Siddharth的回复基础上,如果你想要突出显示除第一个之外的所有重复实例(为了简单地选择所有显示并消除它们),你可以使用他的字符串的这个修改:

=IF(COUNTIF(A$1:A2,A2)>1,"D","S")

对于条件格式,它就像

=COUNTIF(A$1:A2,A2)>1

这只检查当前单元格上方的行,因此副本的第一个实例不会突出显示(因为它上面没有任何重复项)。

答案 6 :(得分:0)

对于返回布尔值的函数,请尝试...

<div class="block block-one">
  <h2 class="block-title--animated">Color Test</h2>
</div>
<div class="block block-two">
  <h2>Color Again</h2>
</div>