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

What is the most effective way to copy cells from one Sheet to another

我正在处理报告中的报告。这意味着;我有一个主报告 (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.Value returns 一组变量值,您可以通过设置不同的 Range.Value = 数组将其放回工作表中。在这种情况下,由于您实际上不需要操作或处理这些值,因此您可以跳过数组并直接执行 Range1.Value = Range2.Value ,它会传输所有值 只要范围大小相同.

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

对于您的代码:

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