2014-01-09 38 views
1

我的工作表具有不同数量的行。列从A到R,基本上包含名称和地址。在客户端名称中包含共同签名者,它们可以从10变为10.我需要将共同签名者(1)行移动到客户端行的末尾。如果该客户端包含多个Cosigner,则下一个Co-signer(2)行将被移至共同签名者(1)信息的末尾。我可以得到第一个工作,但无法弄清楚如何循环通过工作表,并让所有的共同签署者在正确的客户端行上。这是我迄今为止所拥有的。实施例根据特定条件将行移动到另一行的末尾

CLIENT# FIRST NAME LAST NAME  DEBT_SSN  STREET     

00001  MICKEY  MOUSE   000-00-0000  Address Number 1    
      (CS) DONALD DUCK   000-00-0001  Address Number 2    
00002  MINNIE  MOUSE   000-00-0002  Address Number 3    
      (CS) DAFFEY DUCK   000-00-0003  Address Number 4    
      (CS) BARNIE RUBBEL   000-00-0004  Address Number 5  

在这个例子中为(CS)唐老鸭的信息将被移动到第2个的列小号通AI (CS)·达菲鸭将移动到行4个小号通AI。然后(CS)Barnie Rubbel将移动到第4排AJ到AZ。

Sub MOVECS() 

Dim Rng As Range 

Set Rng = Range("B2:B6000").Find(What:="*(CS)*", LookAt:=xlWhole, _ 
              LookIn:=xlValues) 
Rng.Resize(1, 17).Cut Rows(1).End(xlDown).Offset(0, 18) 

End Sub 

我试图添加一个“Nxt Rng”,但是这将需要我的最后(CS)记录并将其移动到第二行。

+0

难道有没有人能帮我解决这个问题?我应该在几天内得到这个文件,我真的不想手动去做。 – user3178824

回答

1

这里是我的解决方案:

Sub append_cs_to_end_of_rows() 
     'once cs row is appended to end of client row, it deletes the source cs row 
     r = 2 
     num_columns = 17 'this is the number of columns in the cs rows. would need to add one to it to get the number of columns in the client rows. 
     Do While Not IsEmpty(Range("b" & r)) 
      client_r = r 
      r = r + 1 
      cur_offset = num_columns 
      Do While IsEmpty(Range("a" & r)) And Not IsEmpty(Range("b" & r)) 
       For c = 2 To 1 + num_columns 
        Cells(client_r, c + cur_offset).Value = Cells(r, c).Value 
       Next c 
       Rows(r).Delete shift:=xlUp 
       cur_offset = cur_offset + num_columns 
      Loop 
     Loop 
    End Sub 

我避免使用复制/粘贴或削减,因为这两个都需要范围的,而且很难没有num_to_col功能来增加一列。

请注意,有最大数量的列,所以你不能有太多的每个客户端的CS。如果每个客户端保持在900以下,则应该可以(假设您使用的是Office 2010或更高版本)。

祝你好运。

+0

非常感谢你!这工作完美:) – user3178824

+0

不客气:) – chrono

相关问题