Я пишу макрос форматирования для отчета, но то, что я придумал, работает не так быстро, как хотелось бы. Любая помощь или предложения по увеличению скорости будет принята с благодарностью.
Я подумал, когда собирал код ниже: если я переберу каждую строку и определю диапазоны, к которым нужно применить форматирование, объединяю их в один диапазон с помощью union (), а затем применю формат в конце , это будет быстрее, чем применять формат для каждой строки в отдельности. Я не уверен, что это так, учитывая, сколько времени потребовалось для выполнения этого кода около 40 тысяч строк
Dim FinalRowReport As Long
Dim i As Long
Dim rangeFormat As Range
Dim rangeBold As Range
Dim rangeColor As Range
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
FinalRowReport = Cells(Rows.Count, 1).End(xlUp).Row
For i = 4 To FinalRowReport
If Cells(i, 2) = Cells(i - 1, 2) Then
If rangeColor Is Nothing Then
Set rangeColor = Range(Cells(i, 1), Cells(i, 12))
Else
Set rangeColor = Union(rangeColor, Range(Cells(i, 1), Cells(i, 12)))
End If
End If
If Right(Cells(i, 2).Value, 5) = "Total" Then
If rangeFormat Is Nothing Then
Set rangeFormat = Range(Cells(i, 1), Cells(i, 19))
Set rangeBold = Range(Cells(i, 20), Cells(i, 23))
Else
Set rangeFormat = Union(rangeFormat, Range(Cells(i, 1), Cells(i, 23)))
Set rangeBold = Union(rangeBold, Range(Cells(i, 20), Cells(i, 23)))
End If
End If
Next i
rangeColor.Font.Color = RGB(255, 255, 255)
rangeFormat.Interior.Color = RGB(217, 217, 217)
rangeFormat.Font.Color = RGB(217, 217, 217)
rangeBold.Interior.Color = RGB(217, 217, 217)
rangeBold.Font.Bold = True
With rangeFormat.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
End With
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Код работает - он очень длинный, может быть, около 20 минут. Любая помощь будет принята с благодарностью.