Страницы: 1
RSS
Подсветка дубликатов, VBA
 
Доброго времени суток!

У меня возник такой вопрос. Как можно выделить дубликаты в Excel с помощью макроса, если массивы разделены друг от друга (т.е.например, Range("A1:B6", "C1:D6")). Я нашла следующий макрос по этой ссылке https://www.planetaexcel.ru/techniques/14/198/ . Всё работает идеально в том случае, если я выбираю весь массив данных. А мне бы хотелось выбрать Range.

Вся проблема в том, что CountIf не работает на разделённые массивы данных. Для этого я нашла ему дополнение WorksheetFunction.Sum(WorksheetFunction.Countif(Range, Cell.Value)>1) . К сожалению, это всё равно не работает полностью на весь Range данных и более того выделяет некоторые дупликаты разным цветом.

Подскажите, пожалуйста, есть ли другой способ программирования этой задачи?

Заранее спасибо!

С уважением,
Лина
 
Файл-пример?
Сделал свой - работает по выделенному диапазону.
Изменено: Anchoret - 07.03.2018 02:52:31
 
Anchoret, спасибо большое за помощь!

Да, код работает на выбранный диапазон. Но я имела ввиду кое-что другое. Что если мне нужно выделить массивы отдельные друг друга.
Я на всякий случай ещё прикрепила пример, если ещё кому-то будет интересен вопрос

Спасибо!
С уважением,
Алина  
 
Костыль с дополнительным циклом:
Код
Sub DuplicatesColoring()
    Dim rCell As Range, Counter As Long
    Dim Dupes()     'объявляем массив для хранения дубликатов
    ReDim Dupes(1 To Selection.Cells.Count, 1 To 2)
    Selection.Interior.ColorIndex = -4142   'убираем заливку если была
    i = 3
    For Each cell In Selection
        For Each rCell In Selection
            If rCell = cell Then Counter = Counter + 1
            If Counter > 1 Then
            For k = LBound(Dupes) To UBound(Dupes)
                'если ячейка уже есть в массиве дубликатов - заливаем
                If Dupes(k, 1) = cell Then cell.Interior.ColorIndex = Dupes(k, 2)
            Next k
            'если ячейка содержит дубликат, но еще не в массиве - добавляем ее в массив и заливаем
            If cell.Interior.ColorIndex = -4142 Then
                cell.Interior.ColorIndex = i
                Dupes(i, 1) = cell.Value
                Dupes(i, 2) = i
                i = i + 1
            End If
        End If
        Next
        Counter = 0
    Next cell
End Sub



Страницы: 1
Наверх