Jim tiene la necesidad de adelantar la fecha en una celda en particular un mes a la medianoche del 14/15 de cada mes (00:00:00 del día 15), y se pregunta cómo se podría hacer.

Como ocurre con muchos problemas en Excel, la respuesta depende de la naturaleza de los datos involucrados y exactamente lo que desee hacer. Si la fecha en la celda es la fecha de hoy, y simplemente desea que la celda muestre el mes actual hasta el 14, y luego el próximo mes, entonces puede usar una fórmula como la siguiente:

=CHOOSE(IF(DAY(NOW())>14,MONTH(NOW())+1,MONTH(NOW())), "January","February","March","April","May","June", "July","August","September","October","November", "December","January")

Esta fórmula devuelve el nombre de un mes, no una fecha. Si prefiere que se le devuelva una fecha, puede usar esta fórmula:

=IF(DAY(NOW())>14,DATEVALUE(IF(MONTH(NOW())=12,1, MONTH(NOW())+1) & "/" & DAY(NOW()) & "/" & IF(MONTH( NOW())=12,YEAR(NOW())+1,YEAR(NOW()))),NOW())

Ambas fórmulas tienen en cuenta el «resumen de fin de año» cuando avanza de diciembre a enero. Se puede crear una versión más corta de esta última fórmula si usa la función DATE en lugar de la función DATEVALUE:

=DATE(YEAR(NOW()),MONTH(NOW())+((DAY(NOW())>14)*1),1)

Esta fórmula, a diferencia del ejemplo de DATEVALUE, siempre devuelve una fecha que es el primer día de un mes determinado.

Si realmente desea avanzar el valor de una fecha en particular en una celda, debe usar una macro para realizar la tarea. Además, debe asegurarse de que la macro solo se ejecute una vez al mes, a una hora determinada de un día determinado. Por ejemplo, si desea que la macro se ejecute a las 00:00:00 el día 15 de cada mes, deberá configurar la macro para que verifique la fecha y la hora, y luego se ejecute en esa fecha y hora en particular. También deberá asegurarse de que el libro de trabajo que contiene la macro esté abierto en esa fecha y hora.

La siguiente macro obtendrá la fecha de una celda y la aumentará en un mes. La macro asume que tiene un rango con nombre, DateCell, que se refiere a la celda que se actualizará.

Sub IncreaseMonth()

Dim dDate As Date     dDate = Range("DateCell").Value     Range("DateCell").Value = _       DateSerial(Year(dDate), _       Month(dDate) + 1, Day(dDate))

End Sub

Para asegurarse de que la macro se ejecute en el momento adecuado, necesitará otra macro. La siguiente macro está diseñada para ejecutarse siempre que se abra el libro de trabajo:

Private Sub Workbook_Open()

If Day(Now) = 14 Then     Application.OnTime ("23:59:59"), "IncreaseMonth"

End If End Sub

Observe que esta macro en particular establece el método OnTime para que ejecute la macro IncreaseMonth a las 23:59:59 del día 14. Se eligió esta fecha y hora porque es más fácil de capturar que las 00:00:00 del día 15.

Recuerde que la macro IncreaseMonth solo se ejecutará si abre el libro de trabajo el día 14 y luego deja el libro abierto hasta el día 15.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (2180) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:

link: / excelribbon-Automatically_Advancing_by_a_Month [Avanzando automáticamente por un mes].