如何移动到下一个空白单元格?

时间:2015-06-19 21:22:38

标签: excel vba excel-vba

我在工作簿中的多个工作表上有数据,我希望将其全部复制到同一工作簿中的一个工作表中。当我运行宏时,我希望首先删除“iPage Data Export”表中的当前数据,然后将其替换为其他表中的数据。

我希望这个过程一次只能发生一列,因为我可能不会带来所有内容。现在我正在努力学习如何只做一个专栏。

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

以下是我的4个问题:

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

  2. 如何启动该行底部的每个复制功能(即在带有值的最后一个单元格之后)?我已经在这个和其他董事会上尝试了很多建议而没有成功。我承认我在这方面不是很有经验。

  3. 如何将其复制到特定列(目前它似乎默认为A。

  4. 如何在粘贴功能期间连接多个列?即如果我想要它插入:A2&“,”B2而不仅仅是A2

  5. 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

2 个答案:

答案 0 :(得分:6)

  

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

Sht.Cells.ClearContents  
  

如何启动该行底部的每个复制功能(即在带有值的最后一个单元格之后)?我已经在这个和其他董事会上尝试了很多建议而没有成功。我承认我对此不是很有经验。

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

详细说明:

  • Rows.Count将返回工作表中的行数,因此在旧式* .xls工作簿中,这将返回数字65,536。因此"C" & Rows.CountC65536

  • 相同
  • 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&amp;“,”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 

答案 1 :(得分: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

对于连接,你需要更具体 - 但我想如果你需要特别的帮助,你应该更清楚地关注一个新的问题。