Найдите и выделите повторяющиеся записи в excel

Я хочу найти повторяющиеся строки и выделить каждую повторяющуюся строку с уникальным контентом отдельно.

В качестве примера:

Строка 1 – 'транзакция $ 44.20'

Строка 25 – 'сделка $ 44.20'

Строка 31 – 'сделка $ 57.40'

Строка 46 – транзакция $ 57.40 '

Строка 54 – 'сделка $ 57.40'

Строка 156 – транзакция $ 15.90 '

Row 197 – 'транзакция $ 15.90'

Как видите, существуют три набора дубликатов: строки 1 и 25, строки 31, 46 и 54 и строки 156 и 197, в то время как каждый дублирующийся контент уникален.

Я хочу найти и выделить все эти уникальные, но повторяющиеся наборы записей, каждый из которых имеет отдельный цвет. Так строки 1,25 – один цвет, строки 31,46,54 – другой, строки 156,197 – третья и так далее.

Собственное Условное форматирование Excel -> Highlight Cell Rules -> Find Duplicates будет выделять все из них одним цветом. Это не то, что я хочу.

Идеи?

Подумал, что я бы пошел на это и немного почистил свои навыки VBA, хотя это, вероятно, было сделано раньше.

Идея заключается в том, что я использую словарь для хранения различных сумм транзакций в качестве ключей. Если ключ найден во второй раз, то я знаю, что это дубликат и может выделить как исходное значение, так и дубликат.

Я решил определить класс Dictionary Entry, в котором хранится местоположение первого экземпляра «ключа», плюс флаг Boolean, который сообщает мне, если он уже произошел более одного раза раньше (в этом случае мне не нужно измените цвет, но просто получите существующий цвет).

Public FirstInstance As Long, Dup As Boolean 

Поскольку в предопределенном наборе цветов есть только 56 цветов, это в конечном итоге закончится из-за цветов, поэтому я установил его, чтобы повторить набор цветов, если это произойдет, но все будет довольно запутанным до этого IMO

 Sub HighlightDups() Dim MyDictionary As Scripting.Dictionary Set MyDictionary = New Scripting.Dictionary Dim MyDictionaryEntry As DictionaryEntry Dim MyColour, palette As Integer Dim I, LastRow As Long Dim contents As Single palette = 2 With ActiveSheet LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row End With With MyDictionary For i = 1 To LastRow contents = Cells(i, 1) If Not .Exists(contents) Then ' New key - create entry Set MyDictionaryEntry = New DictionaryEntry MyDictionaryEntry.FirstInstance = i .Add contents, MyDictionaryEntry Else If Not .Item(contents).Dup Then ' Dup not previously found - set new colour palette = palette + 1 If palette > 56 Then palette = 2 .Item(contents).Dup = True Cells(i, 1).Interior.ColorIndex = palette Cells(.Item(contents).FirstInstance, 1).Interior.ColorIndex = palette Else 'Dup already found - retrieve previous colour MyColour = Cells(.Item(contents).FirstInstance, 1).Interior.ColorIndex Cells(i, 1).Interior.ColorIndex = MyColour End If End If Next i End With End Sub 

Возможно, вам придется Google, как добавить класс и словарь, чтобы сделать эту работу – это довольно просто.

введите описание изображения здесь

  • Формула exxcel для подсчета количества повторяющихся строк в строке
  • Найти дубликаты в datatable с несколькими столбцами, кроме двух
  • Excel - идентификация дубликатов, состоящих из двух столбцов, в порядке изменения
  • Excel 2013: условное форматирование последовательного дублирования в 1 столбце
  • Удаление дубликатов (с условием) в excel
  • Удаление записей из другого файла
  • Найти дубликаты с суффиксом в Excel и сохранить результаты
  • Excel подсчитывается, если значение следующей ячейки различно
  • Могу ли я использовать ту же форму для ввода разных ячеек
  • Добавление уникального номера для дублирования ячеек в Excel
  • Access TransferSpreadsheet Excel - предотвратить дублирование?
  • Давайте будем гением компьютера.