Insertar Fórmula en un código de VBA

Quiero saber la forma en que puedo insertar la siguiente en fórmula en un código de VBA.

=SI(D2=1,SI($P$1>M2,"Nuevo",SI($O$1>L2,"Actual","Nuevo")),SI(M2>$O$1,"Actual","Nuevo"))

Realmente lo anterior lo puedo hacer con el grabador de Macros de Excel, pero lo que me gustaría saber es como puedo replicar esta fórmula en una toda una base de datos que no siempre tiene el mismo tamaño, es decir, que la base puede ser de n mil registros.

Quedo atento a quien me pueda ayudar y de antemano agradezco toda la ayuda prestada.

3 Respuestas

Respuesta
1

Creo que lo que necesitas es usar el método Autofill. Yo lo he utilizado poniendo por ejemplo la fórmula en A1 y luego utilizas la sentencia Range. Autofill especificando el rango.

Respuesta
2

Si utilizas la grabadora de macros te pone algo como esto:

Sub Macro15()
'
' Macro15 Macro
'
    ActiveCell.FormulaR1C1 = _
        "=IF(RC[-1]=1,IF(R1C16>RC[8],""Nuevo"",IF(R1C15>RC[7],""Actual"",""Nuevo"")),IF(RC[8]>R1C15,""Actual"",""Nuevo""))"
End Sub

Lo que tienes que hacer es cambiar ActiveCell por el rango de celdas donde quieres la fórmula:

Sub Macro14()
'
' Por.Dante Amor
'
    'columna "D" contiene datos
    u = Range("D" & Rows.Count).End(xlUp).Row
    With Range("E2:E" & u)  'rango de celdas donde quieres la fórmula
        .FormulaR1C1 = _
            "=IF(RC[-1]=1,IF(R1C16>RC[8],""Nuevo"",IF(R1C15>RC[7],""Actual"",""Nuevo"")),IF(RC[8]>R1C15,""Actual"",""Nuevo""))"
    End With
End Sub

Lo que hace es poner la fórmula en el rango desde E2 y hasta Eu, pero primero calculo la última fila con datos que tiene la columna D, con la última fila de la columna D, ya está completo el rango.

Ahora, si no quieres la fórmula y solamente quieres el resultado, puede ser así:

Sub Macro14()
'
' Por.Dante Amor
'
    'columna "D" contiene datos
    u = Range("D" & Rows.Count).End(xlUp).Row
    With Range("E2:E" & u)  'rango de celdas donde quieres la fórmula
        .FormulaR1C1 = _
            "=IF(RC[-1]=1,IF(R1C16>RC[8],""Nuevo"",IF(R1C15>RC[7],""Actual"",""Nuevo"")),IF(RC[8]>R1C15,""Actual"",""Nuevo""))"
        .Value = .Value
    End With
End Sub

.

'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

.

Avísame cualquier duda

.

E stimado, tienes respuestas por valorar, recuerda valorarlas.

Respuesta
1

Te dejo los resultados de esta macro, para un manejo más fácil dividí la fórmula en 4 partes, el resultado final no cambia te lo pone en uno.

y esta es la macro la primera línea busca todos los datos de hoja y una columna después de la ultima con datos coloca el resultado, si quieres un rango especifico cambo}ia la instrucción set datos a Set datos=range(xx:xx). Currentregion esta instrucción establece una matriz de datos de n columnas por n filas si agregas más o quitas registros esta línea lo toma en cuenta la siguiente vez que la corras e igual al final de las columnas te pone la fórmula en toda la columna, si quieres solo el valor activa la línea .value=value que estará en verde.

sub formular()
Set DATOS = ActiveSheet.UsedRange
Formula1 = "SI(M2>$O$1,""ACTUAL"",""NUEVO"")"
Formula2 = "SI($O$1>L2,""ACTUAL""," & Formula1 & ")"
FORMULA3 = "SI($P$1>M2,""NUEVO""," & Formula2 & ")"
FORMULA4 = "=sI(D2=1," & FORMULA3 & ")"
With DATOS
    Set DATOS = .Rows(2).Resize(.Rows.Count - 1, .Columns.Count)
    With .Columns(.Columns.Count + 1).Resize(.Rows.Count, 1)
        .FormulaLocal = FORMULA4
        '.Value = .Value
    End With
End With
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas