2016-01-21 209 views
3

我有一个数据集,其中每行属于一个独特的人,所以我想要做的就是在每一行中找到重复的值。Excel如何在一行中查找重复的单元格或值?

我尝试使用条件格式,但它非常耗时,因为我必须将其应用到每个单独的行,否则它将在所有行中找到重复,而不仅仅是一行。

enter image description here

能否请您提出好的建议,可以帮助我也可以是公式或VBA或公式的条件格式。

我用宏记录器来创建一个宏,结果如下。如果我可以使它通过一系列的行并应用可帮助的格式

Sub DuplicatesRow1() ' ' DuplicatesRow Macro ' 

' 
    Rows("251:251").Select 
    Selection.FormatConditions.AddUniqueValues 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    Selection.FormatConditions(1).DupeUnique = xlDuplicate 
    With Selection.FormatConditions(1).Font 
     .Color = -16383844 
     .TintAndShade = 0 
    End With 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 13551615 
     .TintAndShade = 0 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 
    Rows("252:252").Select 
    Selection.FormatConditions.AddUniqueValues 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    Selection.FormatConditions(1).DupeUnique = xlDuplicate 
    With Selection.FormatConditions(1).Font 
     .Color = -16383844 
     .TintAndShade = 0 
    End With 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 13551615 
     .TintAndShade = 0 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 
    Rows("253:253").Select 
    Selection.FormatConditions.AddUniqueValues 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    Selection.FormatConditions(1).DupeUnique = xlDuplicate 
    With Selection.FormatConditions(1).Font 
     .Color = -16383844 
     .TintAndShade = 0 
    End With 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 13551615 
     .TintAndShade = 0 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 
    Range("E259").Select End Sub 
+1

这似乎是一个糟糕的Excel设计缺陷。你确实在这里放了'excel-vba'标签。你有没有试图用代码来完成这个任务?如果是这样,请提供您所尝试的。否则,这个问题有可能会被拒绝并被关闭。另一种选择 - 也许输入每行格式的时间更少 - 是从行到行复制和粘贴格式;尽管这对于大量的行数显然是麻烦的。 –

+1

另外,如果您提供一些示例数据来详细说明您的问题,这会增加获得良好答案的机会。 – Michael

+0

@ScottHoltzman添加了Vba代码 –

回答

0

这里是一个循环,它将在每一行上设置条件格式。我根据您的样本数据和代码使用了工作表和范围参考。您可以修改这些以适合您的确切数据集。

我还会注意到,如果存在大量行,我担心会导致Excel中的性能问题,因为格式量可能会严重增加文件大小并影响性能。

Sub LoopCF() 

Dim ws As Worksheet 
Set ws = Sheets("Sheet1") 

'Dim lRow As Long 
'lRow = ws.Range("A2").End(xlDown).Row 'will give row 200 as long as contiguous rows 

Dim rng As Range, cel As Range 
Set rng = ws.Range("B2:B200") 'ws.Range("B2:B" & lRow) 

For Each cel In rng 

    With cel.Resize(1, 4) 

     .FormatConditions.AddUniqueValues 
     .FormatConditions(.FormatConditions.Count).SetFirstPriority 

     With .FormatConditions(1) 

      .DupeUnique = xlDuplicate 

      With .Font 
       .Color = -16383844 
       .TintAndShade = 0 
      End With 

      With .Interior 
       .PatternColorIndex = xlAutomatic 
       .Color = 13551615 
       .TintAndShade = 0 
      End With 

      .StopIfTrue = False 

     End With 

    End With 

Next 

End Sub 
+0

谢谢。运行此代码时出现错误。当我回家时我会修补它。你也可以说明lRow = ws.Range(“A251”)。End(xlDown).Row和Set rng = ws.Range(“B251:B”&lRow)是用来表示这两个值是否让我困惑?假设我想将此应用于第2行至200行,我该怎么做? –

+0

@AAZ - 查看我编辑的代码。 'lRow'只是获取Range中的最后一行,而'rng'则将所需的范围设置为与对象一起工作,因此它可以在该对象上工作。此外,如果你告诉我你得到的错误和在哪一行,我可以帮助:) –

+0

我试过更新的代码,这次没有错误,但它什么也没有做:(工作表的名称是Sheet1。 –

1

我进一步研究了这个,并设法想出了下面的代码,它似乎对我很有用。我是VBA新手,没有足够的经验,所以请让我知道如果我的代码可以进一步提高

Private Sub HighlightDuplicateRow(row As Integer) 

Dim report As Worksheet 
Set report = Excel.ActiveSheet 
report.Cells(row, row).EntireRow.Select 
    Selection.FormatConditions.AddUniqueValues 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    Selection.FormatConditions(1).DupeUnique = xlDuplicate 
    With Selection.FormatConditions(1).Font 
     .Color = -16383844 
     .TintAndShade = 0 
    End With 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 13551615 
     .TintAndShade = 0 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 
End Sub 


Sub DuplicatesInEachRow() 
Dim counter As Integer, limit As Variant 
counter = 2 
limit = InputBox("Give me last row number", "Highlight Duplicates in a Row") 
If limit = "" Then Exit Sub 
Do Until counter > limit 
Call HighlightDuplicateRow(counter) 
counter = counter + 1 
Loop 
End Sub 
相关问题