2017-05-23 197 views
2

我需要循环代码有助于一个小区从R列复制并粘贴到下一个空单元列CExcel VBA中循环代码

塔C

12345      
12345      
12345      
(paste 1 in here) 
12346 
12346 
(paste 2 in here) 
12347 
12347 
12347 
12347 
(paste 3 in here) 

R列

1 

2 

3 

我用这个代码,但是当我有500条记录时,似乎不可能重复这段代码500次。

Range("R2").Select 
Selection.Copy 
Range("C1").Select 

If IsEmpty(ActiveCell.Offset(1, 0)) Then 
    ActiveCell.Offset(1, 0).Select 
Else 
    ActiveCell.End(xlDown).Offset(1, 0).Select 
End If 

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
+0

至少给它一个尝试,使用'for'循环。你可以在这里找到一个相当简单的例子:http://www.excel-easy.com/vba/loop.html – Noceo

回答

0

试试这个:

Option Explicit 

Public Sub CopyAndPaste() 

    Dim colToPaste As New Collection 
    Dim rngCell  As Range 

    With Worksheets(1) 
     For Each rngCell In .Range("B1:B5") 
      colToPaste.Add rngCell 
     Next rngCell 

     For Each rngCell In .Range("A1:A500") 
      If IsEmpty(rngCell) Then 
       If colToPaste.Count = 0 Then Exit Sub 
       rngCell = colToPaste(1) 
       colToPaste.Remove (1) 
      End If 
     Next rngCell 
    End With 

End Sub 

一般情况下,这是我们所拥有的:

  • 集合colToPaste,其中包含范围B1:B5的所有值。您可以根据列B中的最后一行更改收集范围并将其设置为变量。看到这里 - https://www.rondebruin.nl/win/s9/win005.htm
  • 循环经过范围A1:A500,它将检查每个单元格是否为空。如果它是空的,它会给它列表中第一个值 - rngCell = colToPaste(1)。然后它会删除它。
  • 为了知道何时停止,我添加了如果colToPaste.Count = 0 Then Exit Sub=0部分可以删除,但这样更容易理解。

enter image description here

+0

谢谢soooooooo它运作得很好 – kinroh

+0

我知道..... :) – Vityata