在Excel VBA中,根据列数据创build新行

为了logging,我是一个未经培训的,只录制macros的VBA用户。 我试着去挑选点点滴滴,但我仍然是一个完全noob。 请指向正确的方向!

在每一行上,零件号(E列)应与一个源和地址(列G和H)和描述(列I)相关联。 我说“应该是”,但实际上,对于每个零件号码,而不是一个源/地址组合,在许多文件中,某些行上最多有15个不同的源/地址组合,而源/地址组合列在相邻列J / K,L / M,N / O等,将描述栏向右推。

我需要find一个用于复制行的VB方法,与源/地址组合一样多,并且每行除去一个组合。 这是一个例子:

ABCD Part# F Source1 Address1 Source2 Address2 Description 1 xxxx Part1 x (S1) (A1) Nut 2 xxxx Part2 x (S1) (A1) (S2) (A2) Bolt 

第2行有两个源/地址组合,每行只需要一个组合就可以复制,如下所示:

  ABCD Part# F Source Address Description 1 xxxx Part1 x (S1) (A1) Nut 2 xxxx Part2 x (S1) (A1) Bolt 3 xxxx Part2 x (S2) (A2) Bolt 

在另一个文件中,我可能在任何给定的行上有多达十五个不同的源/地址组合,然后需要重复十五次。

这是有道理的吗? 在我的脑海中,我听到了我从来没有用过的循环,do-while,do-until等VBA函数,但是我不知道有足够的语法来开始实现任何东西。 build议吗?

 Sub Test() Dim rw As Range, rwDest As Range, cellSrc As Range Dim colDesc As Long, f As Range colDesc = 0 'see if we can find the "description" column header Set f = Sheet1.Rows(1).Find(what:="Description", LookIn:=xlValues, lookat:=xlWhole) If Not f Is Nothing Then colDesc = f.Column Set rw = Sheet1.Rows(2) Do While Len(rw.Cells(, "E").Value) > 0 Set cellSrc = rw.Cells(, "G") Do While Len(cellSrc.Value) > 0 And _ UCase(Sheet1.Rows(1).Cells(cellSrc.Column).Value) Like "*SOURCE*" Set rwDest = Sheet2.Cells(Rows.Count, "E").End(xlUp). _ Offset(1, 0).EntireRow rw.Cells(1).Resize(1, 6).Copy rwDest.Cells(1) cellSrc.Resize(1, 2).Copy rwDest.Cells(7) If colDesc > 0 Then rw.Cells(colDesc).Copy rwDest.Cells(9) Set cellSrc = cellSrc.Offset(0, 2) Loop Set rw = rw.Offset(1, 0) Loop End Sub