Avanzamento automatico di un mese (Microsoft Excel)
Jim ha bisogno di anticipare la data in una determinata cella di un mese a mezzanotte del 14/15 di ogni mese (00:00:00 del 15) e si è chiesto come si potesse fare.
Come per molti problemi in Excel, la risposta dipende dalla natura dei dati coinvolti e esattamente da cosa si desidera fare. Se la data nella cella è la data odierna e vuoi semplicemente che la cella visualizzi il mese corrente fino al 14 e poi il mese successivo, puoi usare una formula come la seguente:
=CHOOSE(IF(DAY(NOW())>14,MONTH(NOW())+1,MONTH(NOW())), "January","February","March","April","May","June", "July","August","September","October","November", "December","January")
Questa formula restituisce il nome di un mese, non una data. Se preferisci che venga restituita una data, puoi utilizzare questa formula:
=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())
Entrambe queste formule rappresentano il “wrap-around di fine anno” quando si avanza da dicembre a gennaio. È possibile creare una versione più breve di quest’ultima formula se si utilizza la funzione DATE invece della funzione DATEVALUE:
=DATE(YEAR(NOW()),MONTH(NOW())+((DAY(NOW())>14)*1),1)
Questa formula, a differenza dell’esempio DATEVALUE, restituisce sempre una data che è il primo giorno di un determinato mese.
Se vuoi davvero far avanzare il valore di una data particolare in una cella, devi usare una macro per eseguire l’operazione. Inoltre, è necessario assicurarsi che la macro venga eseguita solo una volta al mese, in una determinata ora di un determinato giorno. Ad esempio, se si desidera che la macro venga eseguita alle 00:00:00 il 15 di ogni mese, è necessario impostare la macro in modo che controlli la data e l’ora e quindi venga eseguita in quella particolare data e ora. Dovresti anche assicurarti che la cartella di lavoro contenente la macro fosse aperta in quella data e ora.
La seguente macro recupererà la data da una cella e la aumenterà di un mese. La macro presuppone che tu abbia un intervallo denominato, DateCell, che fa riferimento alla cella da aggiornare.
Sub IncreaseMonth() Dim dDate As Date dDate = Range("DateCell").Value Range("DateCell").Value = _ DateSerial(Year(dDate), _ Month(dDate) + 1, Day(dDate)) End Sub
Per assicurarti che la macro venga eseguita al momento opportuno, avrai bisogno di un’altra macro. La seguente macro è progettata per essere eseguita ogni volta che viene aperta la cartella di lavoro:
Private Sub Workbook_Open() If Day(Now) = 14 Then Application.OnTime ("23:59:59"), "IncreaseMonth" End If End Sub
Si noti che questa particolare macro imposta il metodo OnTime in modo che esegua la macro IncreaseMonth alle 23:59:59 del 14. Questa data e ora sono state scelte perché è più facile da catturare rispetto alle 00:00:00 del 15.
Ricorda che la macro IncreaseMonth verrà eseguita solo se apri la cartella di lavoro il 14 e quindi lasci la cartella di lavoro aperta fino al 15.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (2180) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: