Copy/Paste 动态范围

Copy/Paste dynamic range

从 Sheet "DATA" 范围 B4:Hx 开始,其中 x 是我按行数计算的最后一行。我需要复制此范围并将其粘贴为 sheet "bat" 上的值,从 A1.

开始

今后我需要偏移 6 中的列。所以我的第二份副本将是 I4:Ox,因此一份副本将附加到 bat sheet。 我知道我必须在哪里停下来,我正在使用 Funds 值通知它。

我遇到的第一个错误是当我尝试设置 Column2 = Range("H" & bottomD) 值时得到 "overflow".

当然我还不知道我的 For 循环是否有效。

Sub Copy_bat()

    Dim bottomD As Integer
    Dim Column1 As Integer
    Dim Column2 As Integer
    Dim i As Integer
    Dim Funds As Integer

        Funds = Sheets("bat").Range("u3").Value

        Sheets("DATA").Activate
        bottomD = Range("A" & Rows.Count).End(xlUp).Row
        Column1 = Range("B4")
        Column2 = Range("H" & bottomD)

        For i = 1 To Funds

          Range(Column1 & ":" & Column2).Copy
          Sheets("Data").Cells(Rows.Count, "A").End(xlUp)(2).PasteSpecial Paste:=xlPasteValues, SkipBlanks:=True, Transpose:=False
          Column1 = Colum1.Range.Offset(ColumnOffset:=6)
          Column2 = Colum2.Range.Offset(ColumnOffset:=6)

        Next i

End Sub
  1. 始终在每个模块的开头使用 Option Explicit 以防止拼写错误。总是!您在底部有拼写错误 - Colum1Colum2.
  2. 避免 ActivateSelect(你有 Sheets("DATA").Activate)——更好的性能,更小的错误机会。相反,您应该始终明确告诉VBA您指的是哪个sheet。
  3. 在粘贴值时,您可以简单地执行类似 Range2.value = Range1.value 的操作。无需 .Copy 然后 .Paste.

我已尽力了解您的需求。根据我的理解,你没有使用 Range 数据类型,而你需要它。这导致你出错。

Option Explicit

Sub Copy_bat()

    Dim bottomD As Integer
    Dim i As Integer
    Dim Funds As Integer
    Dim rngArea As Range

        Funds = Sheets("bat").Range("u3").Value

        With Sheets("Data")
            bottomD = .Range("A" & .Rows.Count).End(xlUp).Row
            Set rngArea = Range(.Range("B4"), .Range("H" & bottomD))
        End With

        For i = 1 To Funds
          Sheets("bat").Cells(Rows.Count, "A").End(xlUp)(2).Resize(rngArea.Rows.Count, rngArea.Columns.Count).Value = _
            rngArea.Value
          Set rngArea = rngArea.Offset(, 7)
        Next

End Sub

我创建了一个 rngArea 类型的 Range 变量,而不是 2 个变量(Column1Column2)。此代码从 "Data" sheet 获取信息并将其放入 "bat" sheet。然后在 "Data" sheet 中向右偏移 7(!) 列并将数据放入 "bat" sheet 下面 之前放置的数据。

希望这对您有所帮助。