我有一个简单的宏,我根据结构级别(1-8)对行进行分组。创建轮廓。当我在一个有76 k行的excel上运行宏时,它需要时间,但完成了任务。但在那之后,如果行增加运行宏挂起Excel,我必须杀死任务管理器的进程。
Sub GroupReport()
'Define Variables
Dim StartCell As Range
Dim StartRow As Long
Dim LevelCol As Integer
Dim LastRow As Long
Dim CurrentLevel As Integer 'iterative counter'
Dim i As Long
Dim j As Integer
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
Set StartCell = Cells(5, 1)
StartRow = StartCell.Row
LevelCol = StartCell.Column
LastRow = ActiveSheet.UsedRange.Rows.Count
' Cells.ClearOutline
'inarr = Range(Cells(5, 1), Cells(LastRow, 19))
For i = StartRow To LastRow
CurrentLevel = Cells(i, LevelCol)
Rows(i).Select
For j = 1 To CurrentLevel - 1
On Error Resume Next
Selection.Rows.Group
Next j
Next i
Application.ScreenUpdating = True
End Sub
我试着设置手动计算和屏幕更新关闭,以提高性能,但它没有多大帮助。我试图将数据复制到变量数组中,但无法理解如何通过它循环。
我真的很感激任何建议/帮助,使这与4L和提高性能的Excel工作。
2条答案
按热度按时间yzuktlbb1#
我会限制与SELECT方法的交互次数,实际行数而不是UsedRange. Array.Count,并使用数组来加快处理速度。这里是一些关于你的代码的触摸。
SubMy2nds.Optimized()
End Sub
qvtsj1bj2#
我使用Python中的openpyxl库来复制逻辑,并注意到速度有了显著的提高。对于400,000行的数据集,在A列中随机分配1-8级,测试文件操作仅在79.61秒内完成,没有任何问题。
下面是Python代码。