Inserimento di date senza separatori (Microsoft Excel)
Persone diverse immettono dati in modi diversi. Quando si immettono informazioni in una cella, Excel cerca di capire che tipo di informazioni si immettono. Se inserisci un numero come 08242020, Excel presume che tu stia inserendo un valore numerico e lo tratta di conseguenza. E se il numero immesso fosse effettivamente una data, senza separatori? Excel può capire cosa stai inserendo?
Purtroppo Excel non può. Perché? Perché non hai dato alcuna indicazione che questa dovrebbe essere una data. (Chiavi di Excel sui separatori, non sui valori numerici.) Se tu o le persone che inseriscono i dati non potete modificare le loro abitudini di input in modo che vengano inseriti anche i separatori, sarà necessaria una sorta di soluzione alternativa per convertire le informazioni inserite in un valore di data effettivo .
Il tuo primo pensiero potrebbe essere che potresti utilizzare un formato personalizzato per visualizzare le informazioni. Considera il seguente formato personalizzato:
##"/"##"/"####
Questo formato visualizzerebbe il numero 08142020 come 14/8/2020. L’unico problema è che cambia solo la visualizzazione del numero: se vuoi usare la data come una vera data di Excel, non puoi farlo perché non hai convertito il valore in qualcosa che Excel riconosce come una data.
Se i valori immessi erano molto coerenti nel loro formato e se fossero stati inseriti come testo invece che come valori numerici, esiste un modo semplice per convertirli in date. Con molto coerente, intendo che l’input ha sempre utilizzato due cifre per il mese, due per il giorno e quattro per l’anno. Inoltre, le celle contenenti i valori devono essere formattate come testo. In questo caso, puoi seguire questi passaggi:
-
Seleziona la colonna delle date.
-
Assicurati che non ci sia nulla nella colonna a destra delle date.
-
Scegli Testo in colonne dalla scheda Dati della barra multifunzione nel gruppo Strumenti dati. Excel visualizza la Conversione guidata testo in colonne. (Vedi figura 1.)
-
Seleziona l’opzione Larghezza fissa, quindi fai clic su Avanti.
-
Fare nuovamente clic su Avanti.
-
Nell’area Formato dati colonna, scegli Data.
-
Seleziona l’intervallo nella casella Destinazione, quindi nel foglio di lavoro fai clic sulla cella a destra del primo valore selezionato nel passaggio 1.
-
Fare clic su Fine.
Se tutto è andato bene, Excel avrebbe dovuto analizzare i valori di testo come date e puoi eliminare la colonna originale. Se non ha funzionato, significa che i valori originali non sono stati formattati come testo o che otto cifre non sono state utilizzate per inserire tutte le date.
Un’altra possibile soluzione è utilizzare una formula per convertire i valori immessi in date effettive. La seguente è una di queste formule:
=DATE(RIGHT(A1,4),LEFT(A1,IF(LEN(A1) = 8,2,1)),LEFT(RIGHT(A1,6),2))
Questa formula presuppone che la data inserita (quella senza separatori)
si trova nella cella A1. La formula funzionerà con date a sette o otto cifre.
Se si preferiscono le funzioni personalizzate, è possibile crearne una in VBA che esamina i dati trasmessi, li converte in un formato data / ora e quindi restituisce il risultato. La seguente funzione è molto versatile a questo proposito; funzionerà con formati di data sia americani che europei:
Function DateTime(dblDateTime As Double, _ Optional bAmerican As Boolean = True) ' Converts Date and time "number" without ' delimiters into an Excel serial number (which ' can then be formatted with the Excel ' date/time formats) ' If optional argument is TRUE (or missing), ' function assumes value is of form: ' [m]mddyyyy.hhmm (leading "0" not required) ' If optional argument is FALSE, function ' assumes value is of form: ' [d]dmmyyyy.hhmm (leading "0" not required) Dim iYear As Integer Dim iMonth As Integer Dim iDay As Integer Dim iHour As Integer Dim iMin As Integer iYear = Int((dblDateTime / 10000 - _ Int(dblDateTime / 10000)) * 10000) iDay = Int((dblDateTime / 1000000 - _ Int(dblDateTime / 1000000)) * 100) iMonth = Int((dblDateTime / 1000000)) iHour = Int((dblDateTime - Int(dblDateTime)) * 100) iMin = Int((dblDateTime 100 - _ Int(dblDateTime 100)) * 100 + 0.5) If bAmerican Then DateTime = DateSerial(iYear, iMonth, iDay) Else DateTime = DateSerial(iYear, iDay, iMonth) End If DateTime = DateTime + (iHour + iMin / 60) / 24 End Function
Questa funzione macro presuppone che i dati che le vengono passati siano un valore numerico, come normalmente accade quando si inseriscono date senza separatori. (Fare riferimento alla logica su questo all’inizio del suggerimento.)
Come puoi vedere, ci sono una serie di soluzioni alternative, ma nessuna di esse è semplice come inserire i separatori quando si inseriscono le date. Se addestrare te stesso o le persone che immettono i dati a farlo è difficile, potresti prendere in considerazione l’impostazione di alcune regole di convalida dei dati per le celle di input. Queste regole possono verificare che tu stia inserendo le informazioni utilizzando un formato specifico (come una data con separatori) e fermarti se non lo fai. (Il modo in cui crei le regole di convalida dei dati è stato trattato in altri numeri di ExcelTips.)
_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 (11400) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per l’interfaccia del menu precedente di Excel qui: