【问题标题】:Excel/VBA How to move data from one worksheet to another after last used cell?Excel/VBA 如何在最后使用单元格后将数据从一个工作表移动到另一个工作表?
【发布时间】:2015-02-10 06:11:44
【问题描述】:

我有一个包含 9 个不同工作表的工作簿,其中 1 个工作表(如果其中 4 个工作表合并为 1 个工作表)以进行进一步比较,从复制和粘贴的角度来看这很容易,但我从自动化的角度来看它行的长度可以根据数据增加和减少。

我需要首先在 A、B、C 列的左侧复制工作表 A,然后将工作表 B 直接插入到同一列的工作表 A 下方。工作表 C 和 D 相似,但位于 H、I、J 列中前 2 个工作表的右侧,因此可以进行比较

我试图变得聪明,并在每张工作表上运行多个 for 循环,将数据复制到此工作表中,A&B 共享一个全局变量,C&D 持有另一个变量,以便它们进入正确的位置。我遇到的问题是运行时间长,主要是在 excel 上崩溃。

我也尝试复制粘贴所有列,但没有成功,因为它们的长度不同,因此无法记录。

我终于尝试了一种将行计数器设置为上一张工作表的最后使用的行的方法,但它也导致崩溃。

Sheets("Income").Select

Dim xell As Range

For Each xell In Range("A1:A3005")

If Not xell.Value = "" Then

xell.EntireRow.Copy
Sheets("Workings").Select
Cells(z, "A").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=True, Transpose:=False
Sheets("Income").Select
z = z + 1

End If

Next xell

这是我第一次尝试与其他工作表代码相似的示例,任何人都知道如何将 4 个工作表复制到所需目的地的 1 个工作表>?

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    一些事情:

    首先,停止使用 Sheets().Select。没必要,只会疯狂闪烁。您可以安全地使用 Sheets("Workings").Cells(...) 来引用工作表上的单元格。

    其次,Cells() 只接受整数作为参数,而不是“A”。充其量,这将转换为 65 (ASCII),这对您的情况是错误的。使用 Cells(z, 1) 代替 Cells(z, "A")。

    第三,z 需要从 1 开始,而不是 0。你没有在任何地方初始化它,所以它会从 0 开始,这会崩溃。

    【讨论】:

    • 感谢您的帮助,我将您的笔记与 application.screenupdating = false/true 结合使用以减少执行时间并且效果很好
    【解决方案2】:

    你可以试试这个:

    Sub CopyIt()
        allSheets = Array(Array(sheets("A"), sheets("B")), Array(sheets("C"), sheets("D")))
        Set destSheet = sheets("Dest")
    
        Set startRange = destSheet.Range("A1")
    
        For Each doubleSheet In allSheets
            For Each srcSheet In doubleSheet
                Set firstEmpty = srcSheet.Columns(1).Find("")
                If Not firstEmpty Is Nothing Then
                    RowCount = srcSheet.Columns(1).Find("").Row - 1
                    Range(srcSheet.Cells(1, 1), srcSheet.Cells(RowCount, 3)).Copy Destination:=startRange
                    Set startRange = startRange.Offset(RowCount, 0)
                End If
            Next
            Set startRange = destSheet.Range("H1")
        Next
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-16
      • 1970-01-01
      • 2018-07-22
      相关资源
      最近更新 更多