Страницы: 1
RSS
Удаление дубликатов
 
Доброго дня!
Вопрос такой. Есть две очень большие колонки с данными(по несколько тысяч строк). Допустим, А и В. В колонку С нужно записать все данные из колонок А и В, отсеяв дубликаты.
Пробовала это сделать вручную, покрасив дубликаты цветом. Но на процессе сортировки (сдвинуть дубликаты вверх) компьютер зависает.
Может, есть другой способ?
Заранее спасибо.
 
посмотрите Настройка Plex
Изменено: grigju - 02.02.2017 17:26:21
 
Спасибо. Установила Plex демо версию.К сожалению, в ней нет действия "объединить диапазоны без дубликатов"
 
А где ваш пример в Excel?
 
Вариант (в первой строке заголовки):
Код
Sub Macro1()
Dim LastRow As Long, i As Long, Arr(), Uniq As New Collection, x
    LastRow = Cells.Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    Arr = Range(Cells(2, 1), Cells(LastRow, 2)).Value
    For Each x In Arr
        On Error Resume Next
        If Not IsEmpty(x) Then Uniq.Add x, CStr(x)
    Next
    ReDim Arr(1 To Uniq.Count, 1 To 1)
    For Each x In Uniq
        i = i + 1
        Arr(i, 1) = x
    Next
    [C2].Resize(i, 1).Value = Arr
End Sub

 
Нашёл такой вариант:
Код
Sub RemoveDuplicat()
    Dim rCell As Range
    Dim rRange As Range
    Dim lCount As Long
Application.ScreenUpdating = False
    Set rRange = Selection '= Range("A1", Range("A" & Rows.Count).End(xlUp)) - для столбца
    lCount = rRange.Rows.Count
     
    For lCount = lCount To 1 Step -1
        With rRange.Cells(lCount, 1)
            If WorksheetFunction.CountIf(rRange, .Value) > 1 Then
                .EntireRow.Delete
            End If
        End With
    Next lCount
Application.ScreenUpdating = True
End Sub
- находит дубликаты в выделенном диапазоне активного столбца и удаляет эти строки.
 
Единственное, этот вариант (#6) медленно работает, когда выделяешь весь столбец...
Может кто подсказать как его ускорить?? :)
Сама логика кода вполне устраивает.
 
По-моему это просто делается. Копируете колонку один в колонку три, далее колонку вторую в опять же третью (ниже). Далее закладка "данные" - "удалить дубликаты" для третьей колонки. Все без макросов.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
Владимир Самара написал:
подсказать как его ускорить?
Код
Set rRange = intersect(Selection, selection.parent.usedrange)
 
Hugo, то, что нужно! Сказка!!! :) Благодарю!

Кстати, если задать:
Код
Set rRange = Application.Intersect(ActiveSheet.UsedRange, ActiveSheet.Columns(ActiveCell.Column))
то будут удаляться дубликаты во всём активном столбце (определяется по активной ячейке) и тоже без тормозов :))
Но вариант Hugo более универсальный, так как если выделить столбец, то эффект будет таким же, плюс можно чистить тока выделенный диапазон!
Страницы: 1
Наверх