2014-01-09 75 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

相關問題