Trade Off: ¿Eficiencia o elegancia en una macro?

Me encuentro en la siguiente disyuntiva:

Comencé a programar una macro en VBA para automatizar un informe de periodicidad mensual para mi trabajo. En una primera instancia la macro "arrastraba" fórmulas ya introducidas en la primera fila de la hoja de excel. La macro funciona de manera eficiente, tardando unos pocos segundos en realizar su trabajo, sin embargo, encuentro poco elegante que esta dependa de las fórmulas ya introducidas en la planilla.

En una segunda instancia, programe una macro que no dependa de estas fórmulas, es decir, en el mismo código de la macro esta todo programado para que el informe se ejecute de manera automática. Sin embargo, la macro tarda unos 10 minutos en ejecutarse por completo.

¿Con cuál macro se quedarían si estuvieran en mi caso?

¿De qué manera puedo hacer más eficiente mi código sin perder robustez?

Respuesta

:)

Imagina que tienes:

- En fila 1 los títulos

- En fila 2 las fórmulas

- Y desde la fila 3 (y hacia abajo) las celdas en las que deseas copiar la fórmulas que tienes en la fila 2.

Entonces:

' Determino la última fila con datos:
últimaFila = Cells(Rows.Count, "a").End(xlUp).Row
With Range("B2:D" & últimaFila)
' Copio hacia abajo las fórmulas ubicadas en B2:D2.
  .FillDown
' Y paso a valores a las fórmulas desde B3:D3 hacia abajo.
  With .Offset(1).Resize(.Rows.Count - 1): .Value = .Value: End With
End With

Con esto consigues que todo tu rango de datos haya sido "recalculado", y sigues manteniendo las fórmulas de la segunda fila a los efectos de futuros recálculos.

Saludos, Mario (Cacho) Rodríguez.

.

.

2 respuestas más de otros expertos

Respuesta

Puedes poner los dos códigos indicando cuál es el que tarda 10 minutos.

También si pudieras poner una imagen de la hoja con datos de ejemplo, procura que en la imagen se vean las filas y las columnas.

Respuesta

Licán, coloca el código porque hay algo muy raro en lo que estás comentando ya que no es lógico que ingresar las fórmulas nuevas te lleve más tiempo (e incluso mucho más) que "copiar/pegar". Probablemente lo que esté pasando es que la fórmula la estás poniendo para todo un rango cuando en realidad no la necesites y me explico...

- Tienes una 'base de datos' con 10000 filas y estás agregando 1 fila adicional, en lugar de colocar la fórmula solo a la última fila, le estás colocando la fórmula a las 10001 filas existentes

Salu2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas