Excel 2016插入副本单元格非常慢

时间:2017-11-17 11:46:36

标签: excel vba

我有一张相当大的纸张(大约60K行乘50列)。我正在尝试将几个(2到8)行复制到剪贴板中,然后插入复制的单元格。此操作需要一分多钟才能完成!

我尝试禁用自动计算,从VBA启动此操作,如下所示:

Range("A1").Insert xlShiftDown

无法使用。如果我粘贴(Ctrl-V)而不是插入它就像一个快照。

有关如何解决此问题的任何想法?

2 个答案:

答案 0 :(得分:1)

由于您可以足够快地粘贴数据,因此请使用而不是插入,然后对行进行排序:

  1. 在第一行数据类型的空列中,您要插入的行数加1(例如,插入3行类型4)
  2. 在下一行中添加下一个数字,然后选择两个单元格并自动填充列,以便每行的数字不断增加
  3. 将新数据粘贴到旧数据的末尾,紧接在最后一行之后
  4. 将第一行粘贴为1,将第二行粘贴为2等
  5. 在数字列上按升序排序,然后删除列

答案 1 :(得分:0)

我实现了Absinthe的算法,这是代码:

    Sub InsertRows()
    Dim SourceRange, FillRange As Range
    Dim LastCol, LastRow, ActRow, CpdRows As Long
    Dim i As Integer
    
    If Application.CutCopyMode <> xlCopy Then Exit Sub
    
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    
    With ActiveSheet
        
        LastCol = .UsedRange.Columns.Count
        LastRow = .UsedRange.Rows.Count
        ActRow = ActiveCell.Row

        .Paste Destination:=.Cells(LastRow + 1, 1)
        
        CpdRows = .UsedRange.Rows.Count - LastRow

        Application.Calculation = xlCalculationManual
        
        Set SourceRange = .Range(.Cells(ActRow, LastCol + 1), .Cells(ActRow + 1, LastCol + 1))
        SourceRange.Cells(1).Value = CpdRows + 1
        SourceRange.Cells(2).Value = CpdRows + 2
        
        Set FillRange = .Range(.Cells(ActRow, LastCol + 1), .Cells(LastRow, LastCol + 1))
        SourceRange.AutoFill Destination:=FillRange
        
        For i = 1 To CpdRows
            .Cells(LastRow + i, LastCol + 1).Value = i
        Next i
        
        .Range(.Cells(ActRow, 1), .Cells(LastRow + CpdRows, LastCol + 1)).Sort Key1:=.Cells(ActRow, LastCol + 1), _
             Order1:=xlAscending, Header:=xlNo, MatchCase:=False, Orientation:=xlTopToBottom
        
        .Columns(LastCol + 1).Delete
        
    End With
    
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    Application.ScreenUpdating = True
    
End Sub

它的工作速度肯定比“插入复制的单元格”快,并且它似乎在第一次使用后加速(我的意思是,当我在第二次,第三次等时运行宏时,它比第一次运行时更快)。也有缺点。例如,以这种方式插入行时,命名范围不会自动展开。

此方法最重要的问题:Excel在排序时不会移动单元格的边框。因此,边界结构将被毁坏。我所知道的唯一解决方法是对边框使用条件格式。

总而言之,这是一个很好的解决方法