复制/粘贴动态范围

时间:2015-06-12 15:15:43

标签: vba excel-vba offset excel-2013 excel

从工作表“DATA”范围B4:Hx开始,其中x是按行计数的最后一行。我需要复制此范围并将其粘贴为从A1开始的工作表“bat”上的值。

前进我需要偏移6中的列。因此,我的第二份副本将是I4:Ox,因此将一份副本附加到bat表格中。 我知道我必须停在哪里,并且我使用Funds值通知它。

我遇到的第一个错误是当我尝试设置Column2 = Range("H" & bottomD)值时,会给我“溢出”。

我确定不知道我的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 个答案:

答案 0 :(得分:1)

  1. 始终在每个模块的开头使用Option Explicit以防止拼写错误。总是!你底部有拼写错误 - Colum1Colum2
  2. 避免ActivateSelect(您有Sheets("DATA").Activate) - 性能更好,错误几率更小。相反,您应该始终明确地告诉VBA您要引用哪个工作表。
  3. 在粘贴值时,您可以执行Range2.value = Range1.value之类的操作。无需.Copy然后.Paste
  4. 我尽力了解你的需求。根据我的理解,你没有使用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"中获取信息。表格并将其放入" bat"片。然后通过"数据"中的 7(!)列向右偏移将数据放入" bat"表格低于以前放置的数据。

    希望这有帮助。