Como reducir tiempo ejecución de macro

Hola:
Tengo una macro que inserta una fórmula en una serie de celdas; la cantidad de celdas en la que se inserta esta fórmula viene a ser de 400, todas en la misma hoja el código que he diseñado es el siguiente:
Dim i As Variant
For i = 5 To 65
 Sheets("Planificación").Cells(i, "N").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "AG").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "AZ").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "BS").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "CL").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "DE").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "DX").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "EQ").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "FJ").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE)),"""", IF(R[-1]C<>"""", VLOOKUP(CONCATENATE(R[-1]C, R[-1]C[-2]), Turnos, 2, FALSE),""""))"
 Sheets("Planificación").Cells(i, "P").FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(CONCATENATE(R[-1]C[-2], R[-1]C[-4]), Turnos, 3, FALSE)),"""", IF(R[-1]C[-2]<>"""", VLOOKUP(CONCATENATE(R[-1]C[-2], R[-1]C[-4]), Turnos, 3, FALSE),""""))"
i = i + 1
Next
End If
End Sub
¿Se puede acortar el tiempo de ejecución de esta macro y simplificar el código? Ya que el tiempo que tarda en ejecutar la macro sobrepasa los dos minutos.
Lo que quiero es insertar la fóomula en las celdas 5,7,9,11,13... Hasta la 65 de la columna N lo mismo en la columna AG, columna AZ... Y así hasta un total de 12 columnas.
Gracias
Respuesta
1
Te propongo 2 cambios:
For i = 5 to 65 Step 2  y le quitás la línea al final de las fórmulas que dice: i=i+1
Además incluir una instrucción al inicio para pasar a modo de cálculo manual, y recién al finalizar el bucle lo pasás a automático, para que no te recalcule cada vez que grabás una fórmula.
Entonces antes del For:
Application.Calculation = xlManual
y antes del End Sub:
Application.Calculation = xlAutomatic
Nota: verificá el End If que aparece antes del End Sub y no se vé de donde viene
Muchísimas gracias.
Como siempre tu respuesta me ha sido de gran utilidad, ahora la macro se ejecuta con muchísima rapidez (ni un segundo).
La instrucción end if corresponde a una línea en la que se establece una condición y que, en el copia pega que te envié, no aparece ésta
Gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas