2015-12-08 34 views
0

我有一个数据集如下:VBA宏复制和粘贴细胞复制细胞

Original data

在本质上我需要重复行(禁止项目)将被删除,并为项目被移到另一个的第一行和右侧。

end goal format

我曾与VBA和从哪里开始,将不胜感激任何帮助的经验非常少。

+1

首先,在你的第二张照片,就是最后两行之间的区别?除了项目数量以外的所有项目都是一样的,所以我们如何才能知道哪些项目需要组合,哪些不需要。第二,也是最重要的,一般来说SO不是我网站的代码。请说明您对发生的特定问题所做的任何尝试,我们将为您提供帮助。 –

+0

对不起Scott,我试图记录我自己的宏,然后在开发人员Tab中向后工作,但我没有取得任何进展。最后一行有错误,日期应该不同。解决方案已经提供,但如果你想要一些喜剧,我可以告诉你我的代码?! –

回答

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

非常感谢Bob,我的尝试是基于录制一个宏然后反向工作。这是完美的 - 再次感谢 –