Страницы: 1
RSS
Макрос для удаления дублей, с переносом данных одного стоблца
 
Необходим макрос, который удаляет дубликаты строки, в которых отличается только один столбец. При этом текст в этом столбце должен скопироваться из удаляемых строк и через ", " вставиться в оригинальную строку. Пожалуйста, посмотрите прикрепленный пример  :)  
 
Скрытый текст
Изменено: oldy7 - 13.12.2017 17:28:57
 
Код
Option ExplicitSub test()
Dim arr(), iarr$(), ikey
Dim lRow&, i&, j&, itxt$
With Sheets("Лист1")
    lRow = .Range("a" & .Rows.Count).End(xlUp).Row
    arr = .Range("a2:o" & lRow).Value
    .Range("a2:o" & lRow).ClearContents
End With
With CreateObject("Scripting.Dictionary")
    For i = 1 To UBound(arr)
        itxt = ""
        For j = 1 To UBound(arr, 2)
            If j <> UBound(arr, 2) - 1 Then itxt = itxt & arr(i, j) & "|"
        Next j
        .Item(itxt) = .Item(itxt) & arr(i, UBound(arr, 2) - 1) & ", "
    Next i
    lRow = 0
    For Each ikey In .keys
        lRow = lRow + 1
        arr(lRow, UBound(arr, 2) - 1) = Left(.Item(ikey), Len(.Item(ikey)) - 2)
        iarr = Split(Left(ikey, Len(ikey) - 1), "|")
        For i = 0 To UBound(iarr)
            If i = UBound(iarr) Then _
                arr(lRow, UBound(arr, 2)) = iarr(i) Else arr(lRow, i + 1) = iarr(i)
        Next i
    Next ikey
End With
    Sheets("Лист1").Range("a2").Resize(lRow, UBound(arr, 2)) = arr
End Sub
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, спасибо, кажется сработало) Эх, как бы и мне научиться писать такие сложные макросы? Основами программирования владею, не подскажите где найти хороший материал?
 
Фундамент - Уокенбах Дж. - Excel 2010. Профессиональное программирование на VBA - 2012
На этом сайте многое почерпнул.
Немного тут
Немного тут
Как говорится с миру по нитке. Но я не пишу сложные макросы. Сложные макросы пишут программисты, я просто любитель  ;)  
"Все гениальное просто, а все простое гениально!!!"
Страницы: 1
Наверх