In un campo data, se inserite 12/1 e premete invio, vi accorgerete che Excel sistemerà il valore completando per voi l’inserimento stesso e mostrando, ad esempio 12/01/2018 (2018 è l’anno in cui ho creato il post).
Il valore dell’anno viene ricavato, com’è prevedibile, dall’orologio del PC. Ci sono casi in cui è necessario inserire un cospicuo numero di dati, ad esempio, dell’anno precedente o addirittura di anni passati.
Se per esempio volessimo inserire dati dell’anno 2017, non c’è modo (a meno di retrodatare l’orologio) di far capire ad Excel ciò che desideriamo.
Tramite VBA è possibile fare in modo da ottenere ciò che vogliamo e retrodatare a piacimento l’anno di riferimento dei dati da imputare.
Prendiamo ad esempio il seguente foglio:
nella colonna A, a partire dalla riga 8, possiamo inserire le nostre registrazioni. Nell’esempio che vi fornirò ho inserito nella cella D1 il valore dell’anno a cui saranno riferite le date che inseriremo nella colonna A.
Per l’automazione, aprite la barra dei Menu e, dal gruppo “sviluppo“, cliccate sull’icona “visual basic“:
Il codice va inserito nel foglio corrente (probabilmente il file sarà composto da più fogli…):
Ecco a voi il codice VBA, copiatelo e incollatelo nella finestra codice che si aprirà doppiocliccando (:D) sul foglio di vostro interesse (nell’esempio il foglio “Mastro”). Ho stimato un numero d’inserimenti di circa 10.000, dovrebbero bastare!
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Range("D1:D1").Value = "" Then MsgBox "La cella D1 deve necessariamente contenere un anno", vbCritical: GoTo 100
' controlla che il cambiamento avvenga solo nella colonna A
If Intersect(Target, Range("A8:A10000")) Is Nothing Then GoTo 100
'controlla che l'anno di riferimento sia inferiore a quello attuale
'e se lo è, diminuisce di 1 l'anno
If Year(Now) = D1 Then GoTo 100
'calcola la differenza anni
DiffAnni = Year(Now) - ActiveSheet.Range("D1:D1").Value
If Target.Cells.Count > 1 Then Exit Sub
If Target = "" Then Exit Sub
If Target.Column <> 1 Then Exit Sub
Application.EnableEvents = False
Target = DateAdd("yyyy", -DiffAnni, Target)
Application.EnableEvents = True
100
End Sub