Удаление дубликатов при перемещении на другой лист - VBA

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток, есть макрос, который удаляет дубликаты и переносит их на другой лист, но нужно добавить еще одно условие, в столбце O идут разные услуги, нужно, чтобы макрос добавлял только те даты на другой лист, если в столбце O стоит услуга "Выезд". Иначе даты дублируются, если в один день оказано больше одной услуги. Не могли бы, пожалуйста, поправить этот момент?

Решение задачи: «Удаление дубликатов при перемещении на другой лист»

textual
Листинг программы
  1. Sub Объединить_дубликаты()
  2.  
  3.     Dim shSrc As Worksheet, shRes As Worksheet
  4.     Dim arr(), lr As Long, i As Long
  5.    
  6.     Application.ScreenUpdating = False
  7.    
  8.     Set shSrc = ActiveSheet
  9.     Set shRes = Worksheets.Add(After:=shSrc)
  10.     shSrc.Columns("F:G").Copy shRes.Columns("A:B")
  11.     shSrc.Columns("K:L").Copy shRes.Columns("C:D")
  12.     shSrc.Columns("J").Copy shRes.Columns("E")
  13.     shSrc.Columns("B").Copy shRes.Columns("F")
  14.     shSrc.Columns("O").Copy shRes.Columns("G")
  15.    
  16.     rw = shRes.Range("G" & Rows.Count).End(xlUp).Row
  17.    
  18.     For i = 2 To rw
  19.     If shRes.Range("G" & i) = "" Then Exit For
  20.     If shRes.Range("G" & i) <> "Выезд" Then shRes.Rows(i).Delete Shift:=xlUp: i = i - 1
  21.     Next i
  22.    
  23.    
  24.     MergeAddress shRes
  25.     shRes.Columns("D").Delete
  26.    
  27.     shRes.Sort.SortFields.Add Key:=shRes.Columns("A"), SortOn:=xlSortOnValues, Order:=xlAscending
  28.     shRes.Sort.SortFields.Add Key:=shRes.Columns("B"), SortOn:=xlSortOnValues, Order:=xlAscending
  29.     shRes.Sort.SortFields.Add Key:=shRes.Columns("E"), SortOn:=xlSortOnValues, Order:=xlAscending
  30.     With shRes.Sort
  31.         .SetRange shRes.Columns("A:E")
  32.         .Header = xlYes
  33.         .MatchCase = False
  34.         .Orientation = xlTopToBottom
  35.         .Apply
  36.     End With
  37.    
  38.     lr = shRes.Cells(shRes.Rows.Count, "A").End(xlUp).Row
  39.     arr() = shRes.Range("A1:E" & lr).Value
  40.     For i = UBound(arr) To 3 Step -1
  41.         If arr(i, 1) = arr(i - 1, 1) And arr(i, 2) = arr(i - 1, 2) Then
  42.             arr(i - 1, 3) = arr(i, 3)
  43.             arr(i - 1, 4) = arr(i, 4)
  44.             arr(i - 1, 5) = arr(i - 1, 5) & Chr(10) & arr(i, 5)
  45.             arr(i, 1) = Empty
  46.         End If
  47.     Next i
  48.    
  49.     shRes.Range("A1:E" & lr).Value = arr()
  50.    
  51.     On Error Resume Next
  52.     shRes.Columns("A").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  53.     On Error GoTo 0
  54.    
  55.     shRes.Columns("A:E").HorizontalAlignment = xlCenter
  56.     shRes.Columns("A:E").VerticalAlignment = xlCenter
  57.    
  58.     Application.ScreenUpdating = True
  59.  
  60. End Sub
  61.  
  62. Private Sub MergeAddress(shRes As Worksheet)
  63.  
  64.     Dim arr1(), arr2(), lr As Long, i As Long
  65.    
  66.     lr = shRes.Columns("C:D").Find(What:="*", LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, _
  67.         SearchDirection:=xlPrevious, MatchCase:=False, SearchFormat:=False).Row
  68.     arr1() = shRes.Range("C2:D" & lr).Value
  69.     ReDim arr2(1 To UBound(arr1), 1 To 1)
  70.    
  71.     For i = 1 To UBound(arr1)
  72.         arr2(i, 1) = arr1(i, 1) & ", " & arr1(i, 2)
  73.     Next i
  74.     shRes.Range("C2").Resize(UBound(arr2)).Value = arr2()
  75.  
  76. End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 4.308 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы