添加/删除行,而无需通常的复制粘贴方法



我的 excel 模型中有 60 个计算块。根据某些条件,模型将生成 2 个数字。一个确定要添加的行数,另一个确定要删除的行数。

基于这两个数字,我必须在 60 个计算块中的每一个添加或删除行。因此,对于每个块,将添加或删除行,但不能同时添加或删除行。我以"Check"和"a"的形式为每个块创建了范围名称,其中"a"从1到60。这些范围包含添加号或删除号。还创建了另一组 60 个范围名称,名称为"PStart"和"a",以获取每个计算块的开始单元格。

我使用复制数据并插入所需行数的常用方法准备了一段代码,但向每个块添加 5 行甚至需要 5 分钟以上。

有没有其他方法可以加快这个过程?感谢您的帮助!

Dim Rows, a As Long
Dim rng, prng, sheetnm_rng As String
For a = 1 To 60
rng = "Check" & a
prng = "PStart" & a
sheetnm_rng = Range(rng).Parent.Name
Rows = Range(rng).Value
If Rows > 0 Then
Sheets(sheetnm_rng).Range(prng).End(xlDown).EntireRow.Copy
Sheets(sheetnm_rng).Range(prng).End(xlDown).EntireRow.Offset(1, 0).Resize(Rows).Insert shift:=xlDown
ElseIf Rows < 0 Then
Sheets(sheetnm_rng).Range(prng).End(xlDown).Offset(Rows + 1).Resize(-Rows).EntireRow.Delete
End If
Next a

我找到了这个,你可能会觉得有用:

https://www.quora.com/What-steps-can-I-take-to-speed-up-for-loops-in-Excel-VBA

第 3 点和第 4 点对您的情况似乎很重要。

3.- 如果您使用的是旧版本的 Excel,请在代码开头关闭屏幕更新,并且不要费心重新打开它。当代码完成执行时,Excel 会自动为您执行此操作。

4.- 如果您要复制和粘贴值,但不需要粘贴格式,请不要。设置 .一个范围的值属性为 。另一个范围的值属性。

您也可以尝试使用您尝试的不同选项来测量您的 Sub 运行时间,以尽量保持最佳状态,即使它没有您想要的那么快。查找代码示例:

Sub CalculateRunTime_Seconds()
'PURPOSE: Determine how many seconds it took for code to completely run
'SOURCE: www.TheSpreadsheetGuru.com/the-code-vault
Dim StartTime As Double
Dim SecondsElapsed As Double
'Remember time when macro starts
StartTime = Timer
'*****************************
'Insert Your Code Here...
'*****************************
'Determine how many seconds code took to run
SecondsElapsed = Round(Timer - StartTime, 2)
'Notify user in seconds
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds", vbInformation
End Sub

希望有帮助

最新更新