La forma más eficaz de agregar formato a Excel - VBA
Tengo una macro que agrega cientos de líneas de datos a una hoja de cálculo de Excel. Llamo a un procedimiento desde un bucle que inserta cada línea de datos. He estado aplicando el formato de la fila cada vez que inserto esos datos. Sin embargo, durante mis pruebas descubrí que puedo insertar todos los datos aproximadamente 3/4 de segundo más rápido (3.3 segundos frente a 4.11 segundos) cuando no aplico el formato línea por línea, sino todos a la vez. El problema que estoy tratando de superar es que no todas las filas tienen el mismo formato; sin embargo, hay un patrón predecible. Dos filas de un formato y una fila de formato diferente. ¿Hay una manera sin hacer un bucle para aplicar estos dos formatos diferentes todos a la vez que me permitirían mantener las mejoras de rendimiento que estoy obteniendo (a los usuarios les gustaría ver una respuesta de 2 segundos por lo que esto podría ser una gran ganancia).
Actualmente estoy usando el siguiente código (la configuración de la aplicación, como la actualización de la pantalla, los cálculos y los eventos están desactivados durante este proceso)
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