【发布时间】: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
【问题讨论】: