Страницы: 1
RSS
удаление повторяющихся строк в очень большой таблице
 
Столкнулся со следующей проблемой.

В таблице нужно удалить ВСЕ строки, если в столбце "2" не уникальное значение.
Раньше я просто по этому столбцу делал условное форматирование на дубликаты. Потом делал фильтр по цвету и удалял эти строки.
А сейчас у меня файл, где 40 000 строк + столбцов 30. И в каждой ячейке много текста. В общем пытаюсь сделать фильтр и эксель на глухо зависает (хотя комп мощный).  
Посоветуйте, как решить эту проблемку.

P.S. В примере, нужно удалить все строки если в столбце В не уникальное значение.
 
важное дополнение - мне не просто повторяющиеся строки нужно удалить. мне и оригинал строки у которой есть дубли - тоже нужно удалить.
 
макросом их!!! действует лучше дихлофоса.
фрилансер Excel, VBA - контакты в профиле
"Совершенствоваться не обязательно. Выживание — дело добровольное." Э.Деминг
 
ikki, ну тогда это все меняет .... и мне даже чуть стыдно ....
 
Цитата
s94 пишет: Посоветуйте, как решить эту проблемку.
Цитата
ikki пишет: макросом их!!!
Чем не совет?
Строк не удаляет, зато выводит "неповторимые" строки рядышком с исходным массивом
Код
Sub uuu()
    Dim a(), b()
    Dim i&, ii
    a = Range("A2:C" & Cells(Rows.Count, 1).End(xlUp).Row).Value
    With CreateObject("Scripting.Dictionary")
        For i = 2 To UBound(a)
            .Item(a(i, 2)) = .Item(a(i, 2)) + 1
        Next
        For Each key_ In .Keys
            If .Item(key_) > 1 Then .Remove (key_)
        Next
        ii = 1
        ReDim b(1 To .Count, 1 To UBound(a, 2))
        For Each key_ In .Keys
            For i = 1 To UBound(a)
                If a(i, 2) = key_ Then
                     b(ii, 1) = a(i, 1)
                     b(ii, 2) = a(i, 2)
                     b(ii, 3) = a(i, 3)
                     ii = ii + 1
                End If
            Next
        Next
    End With
    Cells(2, 5).Resize(UBound(b), UBound(b, 2)) = b
End Sub
 
kalbasiatka, думаю быстрее будет так - заносим в словарь ключ и номер строки массива с этим значением, при повторе вместо номера пишем например 0.
Затем циклом по словарю перекладываем оставшиеся строки (где не 0) даже прямо в этом массиве в верхнюю часть, её и выгружаем.
Если строки удалять - можно номера строк собирать в item через любой разделитель (или в коллекцию), затем циклом по словарю в такие строки ставить метки, затем по меткам любым способом удалять (у ZVI был быстрый механизм разработан тут: http://www.sql.ru/forum/actualthread.aspx?tid=722758 )
Изменено: Hugo - 27.08.2014 01:06:09
 
спасибо
Страницы: 1
Читают тему
Наверх