Función SI anidada en VBA de MSExcel.

Necesito de su valiosa colaboración con esta situación:

Tengo esta Fórmula:

=SI.ERROR(SI(J2="";"";SIFECHA(J2;HOY();"Y")&SI(SIFECHA(J2;HOY();"Y")=1;" Año ";" Años ")&SIFECHA(J2;HOY();"YM")&SI(SIFECHA(J2;HOY();"YM")=1;" Mes y ";" Meses y ")&SIFECHA(J2;HOY();"MD")&SI(SIFECHA(J2;HOY();"MD")=1;" Día ";" Días "));"Error en el cálculo..!")

Quiero utilizarla, así, como está, pero em VBA, es decir, convertirla en código, para que realice el cálculo automáticamente al abrirse el libro.

El rango donde fechas, todas distintas, está a partir de J2 y va hasta J643.

El resultado de esta fórmula, se debe escribir en el rango de K2:K643. Todos los resultados, serán diferentes, ya que las fechas son diferentes. Por eso, también necesito crear la forma de que me detecte hasta donde hay datos.

1 respuesta

Respuesta
1

Si quieres que se ejecute cuando abras el libro, pon la siguiente macro en los eventos de ThisWorkbook

Private Sub Workbook_Open()
'Por.Dante Amor
    u = Range("J" & Rows.Count).End(xlUp).Row
    Range("K2").FormulaR1C1 = _
        "=IFERROR(IF(RC[-1]="""","""",DATEDIF(RC[-1],TODAY(),""Y"")&IF(DATEDIF(RC[-1],TODAY(),""Y"")=1,"" Año "","" Años "")&DATEDIF(RC[-1],TODAY(),""YM"")&IF(DATEDIF(RC[-1],TODAY(),""YM"")=1,"" Mes y "","" Meses y "")&DATEDIF(RC[-1],TODAY(),""MD"")&IF(DATEDIF(RC[-1],TODAY(),""MD"")=1,"" Día "","" Días "")),""Error en el cálculo..!"")"
    Range("K2").AutoFill Destination:=Range("K2:K" & u)
End Sub

Gracias Dante por tu respuesta.

Eso es lo que deseo lograr, sin embargo, quiero que solo me escriba el texto y no que me escriba la fórmula, es decir; que en el resultado, me escriba por Años, POR Meses y POR Días y no la fórmula.

Te agradezco si me ayudas a realizarle ese cambio.

Te anexo la macro con la actualización

Private Sub Workbook_Open()
'Por.Dante Amor
    u = Range("J" & Rows.Count).End(xlUp).Row
    Range("K2").FormulaR1C1 = _
        "=IFERROR(IF(RC[-1]="""","""",DATEDIF(RC[-1],TODAY(),""Y"")&IF(DATEDIF(RC[-1],TODAY(),""Y"")=1,"" Año "","" Años "")&DATEDIF(RC[-1],TODAY(),""YM"")&IF(DATEDIF(RC[-1],TODAY(),""YM"")=1,"" Mes y "","" Meses y "")&DATEDIF(RC[-1],TODAY(),""MD"")&IF(DATEDIF(RC[-1],TODAY(),""MD"")=1,"" Día "","" Días "")),""Error en el cálculo..!"")"
    Range("K2").AutoFill Destination:=Range("K2:K" & u)
    Range("K2:K" & u).Copy
    Range("K2").PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas