2015-12-08 7 views
0

У меня есть набор данных следующим образом:VBA макросов для копирования и вставки элементов из дублирующих клеток

Original data

В сущности мне нужен дубликат строки (бар проект), который будет удален, а для проекта перемещаться в первую строку и справа от другой.

Пример

end goal format

У меня было очень мало опыта работы с VBA и любой помощи о том, где начать была бы оценена.

+1

Во-первых, на втором изображении, в чем разница между последними двумя линиями? Все, кроме номеров проектов, одинаковы, так как мы должны знать, что нужно комбинировать, а какие нет. Второе и самое главное, в общем, SO не является кодом для меня сайта. Пожалуйста, покажите все попытки, которые вы сделали с конкретной проблемой, и мы поможем вам. –

+0

Извините Скотта, я попытался записать свой собственный макрос, а затем работать назад в вкладке разработчика, но я не продвигался вперед. На последней строке была ошибка, дата должна быть другой. Решение было предоставлено, но если вам нужна комедия, я могу показать вам свой код ?! –

ответ

0

Это должно быть прямо вперед, чтобы следовать, любые вопросы, просто спросите

Public Sub MergeProjects() 
Dim lastrow As Long 
Dim lastcol As Long 
Dim i As Long 

    Application.ScreenUpdating = False 

    With ActiveSheet 

     lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row 
     For i = lastrow - 1 To 2 Step -1 

      If .Cells(i + 1, "A").Value = .Cells(i, "A").Value And _ 
       .Cells(i + 1, "B").Value = .Cells(i, "B").Value And _ 
       .Cells(i + 1, "C").Value = .Cells(i, "C").Value And _ 
       .Cells(i + 1, "D").Value = .Cells(i, "D").Value And _ 
       .Cells(i + 1, "E").Value = .Cells(i, "E").Value Then 

       lastcol = .Cells(i, "A").End(xlToRight).Column 
       .Cells(i + 1, "F").Resize(, 100).Copy .Cells(i, lastcol + 1) 
       .Rows(i + 1).Delete 
      End If 
     Next i 

     lastcol = .Range("A1").CurrentRegion.Columns.Count 
     .Range("F1:G1").Value = Array("Project 1", "Project 2") 
     If lastcol > 7 Then 

      .Range("F1:G1").AutoFill .Range("F1").Resize(, lastcol - 5) 
     End If 
    End With 

    Application.ScreenUpdating = True 
End Sub 
+0

Большое спасибо Бобу, мои попытки были основаны на записи макроса, а затем назад. Это прекрасно работает - спасибо снова –

Смежные вопросы