Excel 在VBA中使用范围函数粘贴值
我用这段代码来粘贴一个范围的值,但每当我的数据在一百万或更多行号时,我就开始面临问题,我想打破这个范围,在4/5部分(循环)中运行相同的代码,有人能帮我吗Excel 在VBA中使用范围函数粘贴值,excel,vba,Excel,Vba,我用这段代码来粘贴一个范围的值,但每当我的数据在一百万或更多行号时,我就开始面临问题,我想打破这个范围,在4/5部分(循环)中运行相同的代码,有人能帮我吗 Range("F14:J14").Select Selection.Copy With ActiveSheet RowCount = .Cells(.Rows.Count, "B").End(xlUp).Row End With Range("F14:J14").Select Selection.Copy Range("f15:J" &a
Range("F14:J14").Select
Selection.Copy
With ActiveSheet
RowCount = .Cells(.Rows.Count, "B").End(xlUp).Row
End With
Range("F14:J14").Select
Selection.Copy
Range("f15:J" & RowCount).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("f15:J" & RowCount).Select
Selection.Copy
Range("f15:J" & RowCount).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
您是对的,复制大量的单元格是有问题的,所以在块中处理数据是一个好主意 也就是说,依靠
选择
和复制
粘贴专用
也是有问题的
我会建议这个替代方案
Sub Demo()
Dim rSrc As Range
Dim rDst As Range
Dim rBlk As Range
Dim RowCount As Long
Dim CopyRowStart As Long
Dim CopyRowNum As Long
' Set number of rows to process at a time
CopyRowNum = 100000
' Set references to source and Destination ranges
With ActiveSheet
Set rSrc = .Range("F14:J14")
RowCount = .Cells(.Rows.Count, "B").End(xlUp).Row
Set rDst = .Range("F15:J" & RowCount)
End With
' Copy data in blocks
CopyRowStart = 0
Set rBlk = rDst.Resize(CopyRowNum)
Do While CopyRowStart + CopyRowNum <= rDst.Rows.Count
' Copy formulas
rBlk.Formula = rSrc.Formula
' Convert to values
rBlk.Value = rBlk.Value
' Move to next block
If rBlk.Row + CopyRowNum + CopyRowStart - 1 > rDst.Row + rDst.Rows.Count - 1 Then
Exit Do
End If
Set rBlk = rBlk.Offset(CopyRowNum, 0)
CopyRowStart = CopyRowStart + CopyRowNum
DoEvents
Loop
' Copy remaining rows
If rBlk.Row + CopyRowNum <= rDst.Row + rDst.Rows.Count - 1 Then
Set rBlk = rBlk.Resize(rDst.Row + rDst.Rows.Count - rBlk.Row - CopyRowNum)
Set rBlk = rBlk.Offset(CopyRowNum, 0)
rBlk.Formula = rSrc.Formula
rBlk.Value = rBlk.Value
End If
End Sub
子演示()
变暗rSrc As范围
Dim rDst As范围
变暗rBlk As范围
暗行数与长行数相同
暗显CopyRowStart尽可能长
Dim CopyRowNum尽可能长
'设置一次要处理的行数
CopyRowNum=100000
'设置对源和目标范围的引用
使用ActiveSheet
设置rSrc=.范围(“F14:J14”)
RowCount=.Cells(.Rows.Count,“B”).End(xlUp).Row
设置rDst=.Range(“F15:J”和行计数)
以
'在块中复制数据
CopyRowStart=0
设置rBlk=rDst.Resize(CopyRowNum)
在CopyRooStc+CoprnnUm时,请考虑更好地描述问题。