Удаление дубликатов при перемещении на другой лист - VBA
Формулировка задачи:
Доброго времени суток, есть макрос, который удаляет дубликаты и переносит их на другой лист, но нужно добавить еще одно условие, в столбце O идут разные услуги, нужно, чтобы макрос добавлял только те даты на другой лист, если в столбце O стоит услуга "Выезд".
Иначе даты дублируются, если в один день оказано больше одной услуги. Не могли бы, пожалуйста, поправить этот момент?
Решение задачи: «Удаление дубликатов при перемещении на другой лист»
textual
Листинг программы
Sub Объединить_дубликаты() Dim shSrc As Worksheet, shRes As Worksheet Dim arr(), lr As Long, i As Long Application.ScreenUpdating = False Set shSrc = ActiveSheet Set shRes = Worksheets.Add(After:=shSrc) shSrc.Columns("F:G").Copy shRes.Columns("A:B") shSrc.Columns("K:L").Copy shRes.Columns("C:D") shSrc.Columns("J").Copy shRes.Columns("E") shSrc.Columns("B").Copy shRes.Columns("F") shSrc.Columns("O").Copy shRes.Columns("G") rw = shRes.Range("G" & Rows.Count).End(xlUp).Row For i = 2 To rw If shRes.Range("G" & i) = "" Then Exit For If shRes.Range("G" & i) <> "Выезд" Then shRes.Rows(i).Delete Shift:=xlUp: i = i - 1 Next i MergeAddress shRes shRes.Columns("D").Delete shRes.Sort.SortFields.Add Key:=shRes.Columns("A"), SortOn:=xlSortOnValues, Order:=xlAscending shRes.Sort.SortFields.Add Key:=shRes.Columns("B"), SortOn:=xlSortOnValues, Order:=xlAscending shRes.Sort.SortFields.Add Key:=shRes.Columns("E"), SortOn:=xlSortOnValues, Order:=xlAscending With shRes.Sort .SetRange shRes.Columns("A:E") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .Apply End With lr = shRes.Cells(shRes.Rows.Count, "A").End(xlUp).Row arr() = shRes.Range("A1:E" & lr).Value For i = UBound(arr) To 3 Step -1 If arr(i, 1) = arr(i - 1, 1) And arr(i, 2) = arr(i - 1, 2) Then arr(i - 1, 3) = arr(i, 3) arr(i - 1, 4) = arr(i, 4) arr(i - 1, 5) = arr(i - 1, 5) & Chr(10) & arr(i, 5) arr(i, 1) = Empty End If Next i shRes.Range("A1:E" & lr).Value = arr() On Error Resume Next shRes.Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete On Error GoTo 0 shRes.Columns("A:E").HorizontalAlignment = xlCenter shRes.Columns("A:E").VerticalAlignment = xlCenter Application.ScreenUpdating = True End Sub Private Sub MergeAddress(shRes As Worksheet) Dim arr1(), arr2(), lr As Long, i As Long lr = shRes.Columns("C:D").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _ SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Row arr1() = shRes.Range("C2:D" & lr).Value ReDim arr2(1 To UBound(arr1), 1 To 1) For i = 1 To UBound(arr1) arr2(i, 1) = arr1(i, 1) & ", " & arr1(i, 2) Next i shRes.Range("C2").Resize(UBound(arr2)).Value = arr2() End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д