Страницы: 1
RSS
Удаление строк по условию
 
Всем доброго времени суток.!
Появилась след. интересная задача в экселе:
Таблица из 4-х столбцов и 50 тыс. строк . В таблице есть дубликаты по столбцам: Код, Фамилия, Город. но поле "Число"  у всех разное.
Необходимо удалить дубликаты по с наименьшим значением в столбце Число .
Например в таблице ниже нужно удалить строку с числом 3.

КодФамилияГородЧисло
НПетровТверь3
НПетровТверь7
Была мысль соединить первые 3 столбца через "&" в одно поле, а затем через условное форматирование выделить дубликаты и удалить наименьшие значения, но вся загвоздка в том как правильно записать формулу на повторяющееся значение..

Какие мысли по этой задаче ?

Упрощенный вариант во вложении.

Заранее спасибо.
 
1. Включаете фильтр и сортируете колонку Число по убыванию.
2. Вкладка Данные - Удалить дубликаты (по всем колонкам кроме Число)
3. ???
4. Готово. Остались уникальные строки с самым большим числом.
 
Код
Sub test()
Dim lrow&, i&, arr(), itxt$
Dim sht As Worksheet, ikey
Set sht = Sheets(1)
With sht
    lrow = .Range("b" & .Rows.Count).End(xlUp).Row
    arr = .Range(.[b2], .Range("e" & lrow)).Value
    .Range(.[b2], .Range("e" & lrow)).ClearContents
End With
With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr)
        itxt = ""
        For lrow = 1 To UBound(arr, 2) - 1
            itxt = itxt & arr(i, lrow) & "|"
        Next lrow
        If .Item(itxt) < arr(i, UBound(arr, 2)) Then .Item(itxt) = arr(i, UBound(arr, 2))
    Next i
    i = 0
    For Each ikey In .keys
        i = i + 1
        For lrow = 0 To UBound(Split(ikey, "|"))
            arr(i, lrow + 1) = Split(ikey, "|")(lrow)
        Next lrow
        arr(i, UBound(arr, 2)) = .Item(ikey)
    Next ikey
End With
With sht
    .Range("b2").Resize(i, UBound(arr, 2)) = arr
End With
End Sub
"Все гениальное просто, а все простое гениально!!!"
 
serega124, Nordheim,  Спасибо !
Страницы: 1
Читают тему
Наверх