Come analizzo un formato data non standard in Excel?


24

Ho una colonna di valori di stringa simili a una data nel formato yyyy-mm-dd, ad esempio 2011-Sep-13. Devo convertirli in numeri seriali di data Excel in modo da poterli usare nelle formule.

DATEVALUE non è in grado di riconoscere questo formato; Ho appena #VALUE!provato. Inoltre, non accetta un formato data personalizzato (a differenza della maggior parte dei linguaggi di programmazione).

Come posso convertire formati di data arbitrari in valori di data di Excel?

Risposte:


21

Dovrai eseguire l'analisi delle stringhe, quindi passare un valore formattato appropriato in DATEVALUE- qualcosa del genere:

=DATEVALUE(RIGHT(A1,2)&"-"&MID(A1,6,3)&"-"&LEFT(A1,4))

(modifica: formula aggiornata - testata e funziona per me su un esempio - potrebbe essere necessario perfezionare in base al tuo input)


1
+1: Avevo pronto questo negli appunti quando hai pubblicato: = DATEVALUE (RIGHT (A1,2) e MID (A1, FIND ("-", A1), 5) e MID (A1,3,2))
Eccellente il

Heh, non ho mai pensato di riorganizzare i pezzi. Grazie!
Craig Walker,

1
8 anni e più versioni di Excel successive, questa è ancora la risposta più pertinente! Vorrei che Excel potesse fornire una funzionePARSEDATE([string_value], [date format])
Manu Manjunath il

5

Si noti che i nomi dei mesi sono specifici delle Opzioni internazionali di Windows. Quindi, se le Opzioni internazionali di Windows sono impostate su Ucraino, DATEVALUE restituirà #VALUE! per "07-nov-2012", ma accetterebbe "07-Лис-2012".


Nota molto molto importante !! È un peccato che Excel non riconosca sia l'impostazione locale sia i nomi di mese / giorno inglesi per impostazione predefinita
athanassis,

1

La funzione Excels DateValue dipende dalla regione. Se analizzi una stringa come "04-11-2008" in Europa, verrebbe analizzata il 4 novembre e negli Stati Uniti l'11 aprile.

Per ovviare a questo è possibile utilizzare la funzione DateSerial ed eseguire l'analisi da soli. Questo può anche essere facilmente adattato al tuo formato data non standard.

' Region independent date parsing
' Expects a datetimestr in the format  "04-11-2008 21:39:39"
' The function VBA.DateTime.DateValue() mixes up the date and month in different regions
Function parseDateTime(dateTimeStr As String) As Date

    Dim parts As Variant
    parts = VBA.Strings.Split(dateTimeStr, " ")

    Dim datePart As String, timePart As String
    datePart = parts(0)
    timePart = parts(1)

    Dim dateParts As Variant, day As Integer, month As Integer, year As Integer
    dateParts = VBA.Strings.Split(datePart, "-")
    day = dateParts(0)
    month = dateParts(1)
    year = dateParts(2)

    Dim parsed_date As Date, parsed_time As Date
    parsed_date = VBA.DateTime.DateSerial(year, month, day)
    parsed_time = VBA.DateTime.TimeValue(timePart)

    parseDateTime = parsed_date + parsed_time
End Function
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.