对于我数据库中的每个ID,我必须总结与它们链接的所有概念。例如,ID 2354具有3个概念,每个概念在不同的行上,我必须将这3个概念的总和加起来,然后将该总和粘贴到该概念的第一个数量最初所在的单元格上,然后消除整行第二和第三个概念。
我的宏已经做到了,但是运行时间非常长,而且我的数据库很大,大约有100,000行,我需要一种方法来改善运行时间。这是我的代码:
Sub Macro1()
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Dim t As Long
Dim a As Integer
Dim i As Integer
lastt = Cells(Rows.Count, "A").End(xlUp).Row vacía
For i = 1 To 30
If Cells(1, i).Text = "Report Legacy Key" Then
For t = 2 To lastt
For a = 1 To 40
primera = Cells(t, i).Value
ultima = Cells(t + a, i).Value
repetidas = Range(Cells(t, i + 1), Cells(t + a, i + 1))
If primera = ultima Then
c = Application.WorksheetFunction.Sum(repetidas)
Cells(t, i + 1).Activate
ActiveCell.Value = c
Range(Cells(t + 1, "A"), Cells(t + a, "AB")).Select
Selection.Delete Shift:=xlUp
End If
Next a
If IsEmpty(Cells(t + 1, "A").Value) = True Then
Exit For
End If
Next t
End If
Next i
Application.ScreenUpdating = True
Range("M1").Select
Application.CutCopyMode = False
End Sub
此代码允许在大约15秒内完成1000行的处理,这非常慢,因为它必须完成大约100,000行。
答案 0 :(得分:-1)
您可以做一些事情来缩短执行时间:
arrays
甚至最好使用Scripting.Dictionary
而不是使用单元。单独使用此选项将大大提高速度。SQL
中完成,例如求和。Range
,然后使用Selection
。直接在Range
上进行操作。例如,您可以更改此:
Range(Cells(t + 1, "A"), Cells(t + a, "AB")).Select
Selection.Delete Shift:=xlUp
对此:
Range(Cells(t + 1, "A"), Cells(t + a, "AB")).Delete Shift:=xlUp
遵循这些建议应该可以大大加快速度。
希望这会有所帮助。