2016-01-21 2 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

@ ААЗ - см. Мой отредактированный код. '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 
Смежные вопросы