Najskuteczniejszy sposób dodawania formatowania Excel - VBA
Mam makro, które dodaje setki linii danych do arkusza kalkulacyjnego Excel. Wywoływam procedurę z pętli, która wstawia każdą linię danych. Stosuję formatowanie wiersza za każdym razem, gdy wstawiam te dane. Jednak podczas moich testów odkryłem, że mogę wstawić wszystkie dane o 3/4 sekundy szybciej (3,3 s vs. 4,11 s), gdy nie zastosuję formatowania wiersz po wierszu, ale wszystkie naraz. Problem, który próbuję przezwyciężyć, polega na tym, że nie każdy wiersz ma to samo formatowanie; istnieje jednak przewidywalny wzór. Dwa rzędy jednego formatowania i jeden wiersz o różnym formatowaniu. Czy istnieje sposób bez pętli na zastosowanie tych dwóch różnych formatów w jednym, co pozwoliłoby mi utrzymać przyrost wydajności, który otrzymuję (użytkownicy chcieliby zobaczyć odpowiedź poniżej 2 sekund, więc może to być duży zysk).
Obecnie używam następującego kodu (ustawienia aplikacji, takie jak aktualizacja ekranu, obliczenia i zdarzenia są wyłączone w tym czasie)
Private Sub BuildTerminalSummary(ByRef terminals, ByVal timeFrame)
Dim terminal As clsTerminal
Dim curSheet As Worksheet
Dim breakLoop As Boolean
Dim terminalCode As String
Dim rowNumber As Long
Set terminal = New clsTerminal
Set curSheet = Sheets("Terminal Summary")
rowNumber = 7
'Remove all content, borders, and tint
ClearPage curSheet, rowNumber
For Each terminal In terminals
AddDetailData curSheet, terminal.InfoArray, rowNumber
AddDetailData curSheet, terminal.PriorInfoArray, rowNumber + 1
AddDiffPercentFormulas curSheet, terminal.DiffPercentInfoArray, rowNumber + 2
rowNumber = rowNumber + 2
Next terminal
'Make sure the columns are wide enough to display the numbers
curSheet.Cells.EntireColumn.AutoFit
End Sub
Private Sub AddDetailData(ByRef curSheet, ByRef data, ByVal rowNumber)
With curSheet
With .Cells(rowNumber, 3).Resize(1, 16)
.value = data
.Style = "Comma"
.NumberFormat = "_(* #,##0_);_(* (#,##0);_(* ""-""??_);_(@_)"
End With
'This overides the formatting in the revenue columns with currency instead of comma style
With .Cells(rowNumber, 5).Resize(1, 2)
.Style = "Currency"
.NumberFormat = "_($* #,##0_);_($* (#,##0);_($* ""-""??_);_(@_)"
End With
With .Cells(rowNumber, 13).Resize(1, 6)
.Style = "Currency"
End With
End With
End Sub
Private Sub AddDiffPercentFormulas(ByRef curSheet, ByRef data, ByVal rowNumber)
With curSheet.Cells(rowNumber, 3).Resize(1, 16)
.value = data
.NumberFormat = "0.00%"
End With
End Sub