【问题标题】:Excel calculates the columns when creating a new rowExcel 在创建新行时计算列
【发布时间】:2014-04-15 21:01:36
【问题描述】:

即使我将计算设置为手动,excel 也会在每次创建新行时自动计算列。我创建了一个简单的表格来演示这个问题:

源数据(srcSheet)包含 1000 行:

将其复制到两个“目标表”:

第一个有几个“慢列”,其中包含非常繁重的公式。

此表在我的机器上的复制操作需要 12.5 秒。

第二个“目标表”不包含这些慢列:

复制操作耗时0.0039s。

有没有什么方法可以在不计算每一行的情况下复制数据?

这是我使用的电子表格:https://www.dropbox.com/s/0ue9n4a8avstpzf/Excel%20Calculation%20Demo.xlsm

这是我用来复制数据的代码:

Dim sourceRange As Range, destRange As Range

Sub Test()
Dim StartTime As Double, EndTime As Double
StartTime = Timer

Sheets("SrcSheet").Select
Set sourceRange = Range("srcTb[Data]")
Sheets("DestSheet1").Select
Set destRange = Range("destTb[Data]")

sourceRange.Rows.SpecialCells(xlCellTypeVisible).Copy Destination:=destRange

EndTime = Timer
Debug.Print "PerfTest1: ", EndTime - StartTime

StartTime = Timer
Sheets("DestSheet2").Select
Set destRange = Range("destTb2[Data]")

sourceRange.Rows.SpecialCells(xlCellTypeVisible).Copy Destination:=destRange
EndTime = Timer
Debug.Print "PerfTest2: ", EndTime - StartTime
End Sub

更新回复:Sathish,

在尝试了您的建议后,我得到了以下时间安排:

Testing semi-automatic: 0
PerfTest1:     7.38671875 
PerfTest2:     0.0390625 
Testing manual: 0
PerfTest1:     18.24609375 
PerfTest2:     19.48828125 
Testing semi-automatic: 1
PerfTest1:     7.234375 
PerfTest2:     20.97265625 
Testing manual: 1
PerfTest1:     18.859375 
PerfTest2:     19.546875 
Testing semi-automatic: 2
PerfTest1:     7.26171875 
PerfTest2:     20.796875 
Testing manual: 2
PerfTest1:     18.03515625 
PerfTest2:     19.640625 
Testing semi-automatic: 3
PerfTest1:     7.234375 
PerfTest2:     20.55078125 
Testing manual: 3
PerfTest1:     18.296875 
PerfTest2:     19.46484375 

平均而言,半自动似乎更快,但数字有点混乱......

Sub Clear()
    Sheets("DestSheet2").Select
    Range("A3").Select
    Range(Selection, Selection.End(xlToRight)).Select
    Range(Selection, Selection.End(xlDown)).Rows.Delete

    Sheets("DestSheet1").Select
    Range("A3").Select
    Range(Selection, Selection.End(xlToRight)).Select
     Range(Selection, Selection.End(xlDown)).Rows.Delete
End Sub

Sub TestManual()
Clear
 Application.Calculation = xlCalculationManual
 Test
End Sub

Sub TestSemiAutomatic()
Clear
 Application.Calculation = xlCalculationSemiautomatic
 Test
End Sub

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    你试过了吗

    自动除表格 > 工具 > 选项 >计算

    VBA - 也可以在代码中试试这个

    Application.AutoCorrect.AutoFillFormulasInLists = False

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-10-21
      • 1970-01-01
      • 1970-01-01
      • 2019-03-26
      • 2021-12-08
      相关资源
      最近更新 更多