2015-06-19 47 views
0

我有工作簿中的多个工作表中的数据,我希望将其全部复制到同一工作簿中的一个工作表中。当我运行宏时,我希望它首先删除“iPage Data Export”表中的当前数据,然后用其他表中的数据替换它。如何移动到下一个空白单元格?

我希望该过程一次发生一列,因为我可能无法完成所有工作。现在我正试图学习如何做一列。

我能够从一张纸上复制列中的所有内容,但是当它移动到下一张时,它会覆盖现有数据。最后,我只复制了一张价值数据。

这里是我的问题4:

  1. 我如何让它运行程序之前清除该表中的数据?

  2. 如何让它在该行底部开始每个复制功能(即在具有值的最后一个单元格之后)?我曾尝试过很多关于这个和其他董事会的建议,但都没有成功。我承认我在这方面不是很有经验。

  3. 如何我可以把它复制到一个特定的列(目前它只是似乎默认为A.

  4. 我怎么能连接多个列粘贴功能时即如果我想它插入? A2 & “” B2,而不只是A2

Sub CombineData()

Dim Sht As Worksheet For Each Sht In ActiveWorkbook.Worksheets If Sht.Name <> "iPage Data Export" Then Sht.Select Range("C:C").Copy Sheets("iPage Data Export").Select ActiveSheet.Paste Else End If Next Sht End Sub
+0

每个帖子最好只有一个问题。 @SO很慷慨,可以在别人不可能的地方解决所有问题。特别慷慨,因为这些问题在本网站的其他地方重复。 [最后一行](http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba/11169920#11169920)和[加入列](http://stackoverflow.com/questions/8482759/simple-vba-array-join-not-working/8482852#8482852)and [clearing](http://stackoverflow.com/questions/19593907/clear-contents-of-cells-in-vba-使用列参考/ 19594089#19594089) –

回答

2

这应该拷贝做:

Sub CombineData() 
    Dim sheet As Worksheet 

    For Each sheet In Worksheets 
     If (sheet.Name <> "iPage Data Export") Then 
      sheet.Select 
      Range("A1", ActiveCell.SpecialCells(xlLastCell)).Select 
      Selection.Copy 
      Worksheets("iPage Data Export").Activate 
      Cells(1, ActiveCell.SpecialCells(xlCellTypeLastCell).Column + 1).Select 
      ActiveSheet.Paste 
     End If 
    Next 
End Sub 

对于连接,你需要更具体 - 但我想你应该打开一个更清晰的焦点新问题,如果你需要特定的帮助。

6

如何在运行例程之前清除此表上的数据?

Sht.Cells.ClearContents 

我怎样才能使在该行的底部开始,每个拷贝功能(即用一个值最后一个单元格之后)?我曾尝试过很多关于这个和其他董事会的建议,但都没有成功。我承认我在这方面不是很有经验。

Range("C" & Rows.Count).End(xlUp).Offset(1, 0) 

详细:

  • Rows.Count将返回的行数的表,所以在传统风格的* .xls工作簿将返回数65,536。因此"C" & Rows.Count相同C65536

  • Range("C" & Rows.Count).End(xlUp)是一样的去C65536和紧迫按Ctrl + - 命令End(xlDirection)告诉程序要走的最后一个单元格在这个范围内。在这种情况下,我们将在包含在列数据的最后一个单元结束C.

  • .Offset(1, 0)意味着我们想要返回的范围内的行和/或列的偏移量。 VBA使用RC(行列)引用,因此,无论何时您看到类似Offset()函数的函数都将两个数字作为参数传递,它通常与该行和列按照该顺序相关。在这种情况下,我们需要比我们引用的最后一个单元格低一行的单元格。总之短语Range("C" & Rows.Count).End(xlUp).Offset(1, 0)表示转到C列中的最后一个单元格,直到我们用数据命中最后一个单元格,然后返回下面的单元格 - 这将是下一个空单元格。

我怎样才能把它复制到一个特定的列(目前它只是似乎默认为A.

Range("C:C").Copy Destination:=Sheets("iPage Data Export").Range("A:A") 

您可以通过Destination参数在同一直线上,实际上绕过剪贴板(更快,更清洁)

如何在粘贴功能中连接多个列? 。如果我想它插入:A2 & “” B2,而不只是A2

比方说,你想引用列A,B和F - 只需使用:

Range("A1, B1, F1").EntireColumn 

总而言之,你可以简化你现有的代码到类似的东西(未经测试):

Sub CombineData() 

Dim Sht As Worksheet 
    For Each Sht In ActiveWorkbook.Worksheets 
     If Sht.Name <> "iPage Data Export" Then 
      Sht.Range("C1:C" & Cells(Sht.Rows.Count, 3).End(xlUp).Row).Copy Destination:=Sheets("iPage Data Export").Range("A:A") 
     End If 
    Next 

End Sub 
+0

具有良好解释的可靠答案。我认为连接位指的是将所有的值放在一个单元格中,因为OP调用了普通的'&'操作符,但他们可能会澄清这一点。 –

+0

@Byron是最后一个有点不清楚,所以只是做了我能做的。 –

+1

教一个人钓鱼;) –

相关问题