build议macros在单列中查找重复项

发现了很多涉及在两列中find重复的问题:

即MS Excel如何创build一个macros来查找重复项并突出显示它们? 和Excel标记重复的值

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

第1栏


酒吧
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是匹配的。 酒吧和酒吧是匹配的。 等代码匹配string和Ints。 但是我希望macros能够匹配Foo和foo。 如何让Excel忽略大小写?

这个问题( 在Excel工作表中检测重复的function )似乎相关,但是我无法适应代码或理解作者做了什么。 对代码,解释或build议的任何改进将非常感激。

谢谢。

更新:

刚注意到一些很奇怪的东西。

数据:

IB6061
IC6071

匹配是否使用我的macros或如果我在Excel中使用条件格式工具。 任何原因为什么?

在您的Exists()&.Add()行上,使两个值都是相同的大小写:

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

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

这样,重复将总是以大写forms添加到字典中,因此大小写决不会影响。

富兰克林

为什么不使用Excel公式?

如果这些值在列A中,请在单元格B1中input并将其复制下来?

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

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

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

跟进

数据:

IB6061

IC6071

匹配是否使用我的macros或如果我在Excel中使用条件格式工具。

任何原因为什么?

你使用什么公式?

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

 =COUNTIF(A:A,A1)>1 

看快照

在这里输入图像描述 希德

你可以把所有的键都放在小写字母中,例如:

 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 

这对我有用

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 

你可以加

 Option Compare Text 

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

CAT猫猫

…都会匹配。

build立在Siddharth的回应之上,如果你想突出显示除第一个之外的所有副本的实例(为了简单地select所有显示并消除它们的副本),可以使用以下string的修改:

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

对于条件格式,这将是

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

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

对于一个函数返回一个布尔尝试…

 Option Explicit Public Function DUPLICATE_VALUE(rngMyRange As Range, rngMyCell As Range) As Boolean If WorksheetFunction.CountIf(rngMyRange, rngMyCell.Value) > 1 Then DUPLICATE_VALUE = True Else: DUPLICATE_VALUE = False End If End Function