Insertar fórmula con macro según condición

Les pido ayuda para desarrollar una macro que se debería accionar mediante un botón de comando.

En cada celda del rango C15:C700 está ingresada la letra "m" o la letra "s". Lo que necesito es que al accionar el botón de comando, se inserten dos fórmulas diferentes en todo el rango P15:P700, dependiendo de la condición "m" o "s" que se haya en la misma fila, pero en el rango C. Cabe destacar que lo que se debe insertar es la fórmula escrita, y no sólo el resultado de la fórmula.

Ejemplo:

  • Si en C15 hay una "m", en P15 se debe insertar la fórmula =IF(M15>0,N15*M15,"""")
  • Si en C83 hay una "s", en P83 se debe insertar la fórmula =IF(M83>0,O83*M83,"""")

2 Respuestas

Respuesta
2

Te anexo un par de macros

La primera, te pone una fórmula como esta:

=SI(C15="m",SI(M15>0,N15*M15,""),SI(C15="s",SI(M15>0,O15*M15,""),""))

La fórmula verifica si en la celda C15 tienes una letra "m" o una "s" u otro valor.

Sub Macro()
'Por.Dante Amor
    With Range("P15:P700")
        .FormulaR1C1 = "=IF(RC[-13]=""m"",IF(RC[-3]>0,RC[-2]*RC[-3],""""),IF(RC[-13]=""s"",IF(RC[-3]>0,RC[-1]*RC[-3],""""),""""))"
    End With
End Sub


Si no quieres la fórmula con la condición de verificar "m" o "s", entonces utiliza la siguiente macro:

Sub Macro2()
'Por.Dante Amor
    For i = 15 To 700
        If Cells(i, "C") = "m" Then
            Cells(i, "P").FormulaR1C1 = "=IF(RC[-3]>0,RC[-2]*RC[-3],"""")"
        ElseIf Cells(i, "C") = "s" Then
            Cells(i, "P").FormulaR1C1 = "=IF(RC[-3]>0,RC[-1]*RC[-3],"""")"
        End If
    Next
End Sub
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Dante,

Tu fórmula anduvo muy bien... muchas gracias.

Hago una consulta más... La siguiente macro me la pasaron hace ya bastante tiempo, y sirve para insertar la fórmula sólo si la celda en C tiene "m". Veo que esta macro es diferente a la tuya. ¿Qué debería "agregarle" a esta macro si quisiese que haga lo mismo que la que me pasaste, o sea que ponga una fórmula para "m", otra para "s", y nada en donde en C no hay nada? Lo consulto sólo por inquietud...

Dim C As Range, grp As Range

For Each C In Range("c15:c700")

If C = "m" Then
If grp Is Nothing Then Set grp = C Else Set grp = Union(grp, C)
End If
Next
grp.Offset(, 13) = "=IF(M15>0,O15*M15,"""")"

Te anexo la macro actualizada

    Dim C As Range, grp As Range, grs As Range
    For Each C In Range("c15:c700")
        If C = "m" Then
            If grp Is Nothing Then Set grp = C Else Set grp = Union(grp, C)
        ElseIf C = "s" Then
            If grs Is Nothing Then Set grs = C Else Set grs = Union(grs, C)
        End If
    Next
    grp.Offset(, 13) = "=IF(M15>0,N15*M15,"""")"
    grs.Offset(, 13) = "=IF(M15>0,O15*M15,"""")"

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

Feliz año nuevo

Seria de la siguiente forma me confirmas que las celda no están vacías tiene "s" y "m"

Sub buscarMyS()
Sheets("hoja1").Select
Range("c15").Select
Do While ActiveCell.Value <> ""
If ActiveCell = "m" Then
ActiveCell.Offset(0, 15) = "=IF(M15>0,N15*M15,"""")"
End If
If ActiveCell = "s" Then
ActiveCell.Offset(0, 15) = "=IF(M83>0,O83*M83,"""")"
End If
ActiveCell.Offset(1, 0).Select
Loop
MsgBox "informe completado"
End Sub

No olvides valorar si te silve para cerrar la pregunta 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas