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
- 始终在每个模块的开头使用
Option Explicit
以防止拼写错误。总是!您在底部有拼写错误 - Colum1
和 Colum2
.
- 避免
Activate
和 Select
(你有 Sheets("DATA").Activate
)——更好的性能,更小的错误机会。相反,您应该始终明确告诉VBA您指的是哪个sheet。
- 在粘贴值时,您可以简单地执行类似
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 个变量(Column1
和 Column2
)。此代码从 "Data" sheet 获取信息并将其放入 "bat" sheet。然后在 "Data" sheet 中向右偏移 7(!) 列并将数据放入 "bat" sheet 下面 之前放置的数据。
希望这对您有所帮助。
从 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
- 始终在每个模块的开头使用
Option Explicit
以防止拼写错误。总是!您在底部有拼写错误 -Colum1
和Colum2
. - 避免
Activate
和Select
(你有Sheets("DATA").Activate
)——更好的性能,更小的错误机会。相反,您应该始终明确告诉VBA您指的是哪个sheet。 - 在粘贴值时,您可以简单地执行类似
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 个变量(Column1
和 Column2
)。此代码从 "Data" sheet 获取信息并将其放入 "bat" sheet。然后在 "Data" sheet 中向右偏移 7(!) 列并将数据放入 "bat" sheet 下面 之前放置的数据。
希望这对您有所帮助。