将单元格从一个工作表复制到另一个工作表的最有效方法是什么



我正在编写报告报告。这意味着;我有一个主报告(sheet 'Rm'),它将保存其余子报告的结果值(sheet 'Rs_1'....'Rs_n')

Rm只会从每个Rs_i中写入 2 列,并且对于找到的每个子报告 (Rs),它将按顺序粘贴到右侧。

由于有超过 100,000 个单元格和更多的 100 个子报告要复制和粘贴,我想优化最佳方式

。所以我的问题是。vba 将Worksheets(Rs_1).(Range("B14:B500;F14:F500")列从worksheets(Rs_1).Range("A14:F500")复制到主报告中的两 (2) 列的最优化方法是什么:Worksheets(Rm).Range("E15:F501")

For Each i_Rs In ActiveWorkbook.Worksheets
If i_Rs.Name = mainReportName Then
'do Nothing on Main Report
Else
'-->take report's Order Nr and Part Nr
i_Rs_Nr = GetNumeric(i_Rs.Range(Rs_NrPosRng).Value)
i_Rs_PartNr = GetNumeric(i_Rs.Range(Rs_ParNrPosRng).Value)

'-->get Rs big Range
Set i_Rs_BigRng = FindStringRng("A:H", "Characteristic", i_Rs.Name)
Set i_Rs_BigRng = Range(i_Rs_BigRng, i_Rs_BigRng.End(xlToRight).End(xlDown))

'-->set the actual range of MainReport to paste value from
For j_Rm = 1 To Rm_BigRng.row Step 2 ' loop on every two columns
Set j_RmRng = Range(Rm_BigRng(1, 1), Rm_BigRng(qtyCharacsRows, 2))
'************************************************
'*** HERE logic to take the sub from each report and copy-paste values
'************************************************
Set j_RmPartNrRng = Range(Rm_BigRng(1, 1), Rm_BigRng(1, 1))
Set j_RmPartNrRng = Cells(j_RmRng.row - 2, j_RmRng.Column + 1)
'-->write part number into j_Rm
j_RmPartNrRng.Value = i_Rs_PartNr
'**** get sub range for each Rs
Set i_Rs_BigRng = Range(i_Rs_BigRng(2, 1), i_Rs_BigRng(qtyCharacsRows + 1, i_Rs_BigRng.Columns.count)) ' Need optimization to erase first row
Set i_Rs_subRng = Union(i_Rs_BigRng.Columns(2), i_Rs_BigRng.Columns(6)) ' need columns in letters

'*** Copy Rs("B:B,F:F").values into Rm("E:F").values
j_RmRng.Value = i_Rs_subRng.Value 'Error: the first column is copying good the second is just a copy of the first
Next j_Rm   
End If       
Next

如果您不需要单元格格式,那么最快的方法是完全避免Range.Copy,而只是使用数组直接传递值。

当一个 Range 包含多个单元格时,Range.Value 将返回一个变量值数组,您可以通过设置不同的 Range.Value = Array,将这些变量值放回工作表中。在这种情况下,由于您实际上不需要操作或处理值,因此您可以跳过数组并直接执行Range1.Value = Range2.Value,只要范围大小相同,它就会传输所有值。

因此,据我所知,传输数据的最快方法是Range1.Value = Range2.Value.

对于您的代码:

Worksheets(Rm).Range("E15:F501").Value = Worksheets(Rs_1).Range("B14:B500,F14:F500").Value

相关内容

最新更新