2012-05-04 107 views
0

我在列H2中有数据。 。我想将它们复制到同一电子表格的其他地方。 但是我复制它的地方会一次更改一个COLUMN,因为下面的每一列都被宏所填充。从一列复制数据,粘贴第一个空列

我现有的宏成功搜索并将此列数据粘贴到下面的空列如B31。当我有10个新的数据时,下一次运行宏时,我想将它粘贴到C31中,在列C中(是下一个空行)。下一次,D31 .......等。 。我的宏在H2:H11中重复抓取数据并将其粘贴到B31中,但是每次我再次运行宏时都会覆盖该列。它不是“看到”列B已经有数据放在那里通过运行宏之前....代码有什么问题?

Range("H2:H11").Select Selection.Copy 
Range("A31").Select 
Range("A31:M31").End(xlToLeft).Offset(0, 1).Select 
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 
    :=False, Transpose:=False 
ActiveCell.Rows("1:10").EntireRow.Select 
Application.CutCopyMode = False 
+0

是第一次通过后B31有没有数据? – Sam

+0

我有一个替代解决方案,我可以发布,如果你想。 – Sam

+0

是的,B31不断收到新数据,覆盖以前的数据。仅供参考,A31包含“标题”信息,因此它从a31开始,看到它不是空白,移动到一个单元格并粘贴,即使它不是空白。 – CJG

回答

1
Range("A31:M31").End(xlToLeft).Offset(0, 1).Select  

应该

Range("M31").End(xlToLeft).Offset(0, 1).Select 

替代解决方案是下面(我没有测试它,因为我不是我的MS PC上,抱歉)

dim lRow as Long 'Output Row 
lRow = 31   'Start at row 31 

    For i = 2 to 13 'Column B to Column M 

     'Count if there is any values in the columns 
     '(if there is a header then change the 0 to 1) 

     If Application.WorksheetFunction.CountA(ActiveSheet.Columns(i)) = 0 Then 

      For Each c in Range("H2:H11") 'Cycle through output values 

      ActiveSheet.Cells(lRow, i).value = c.Value 'Assign values 

      lRow = lRow + 1 'Increment row number 

      next c 

     exit for 'exit column loop 

     end if 

    next i 
+0

我的方法可能不是最好的做事方式,但我尽量避免在宏中复制和粘贴。 – Sam

+0

简短的一行解决方案修复它...非常感谢。 – CJG

相关问题