Comment analyser un format de date non standard dans Excel?

24

J'ai une colonne de valeurs de chaîne de type date au format yyyy-mm-dd, par exemple 2011-Sep-13. Je dois les convertir en numéros de série de date Excel afin de pouvoir les utiliser dans des formules.

DATEVALUE n'est pas en mesure de reconnaître ce format; Je reçois juste #VALUE!quand j'essaye. Il ne prend pas non plus de format de date personnalisé (contrairement à la plupart des langages de programmation).

Comment puis-je convertir des formats de date arbitraires en valeurs de date Excel?

Craig Walker
la source

Réponses:

21

Vous devrez effectuer une analyse de chaîne, puis passer une valeur formatée appropriée dans DATEVALUE- quelque chose comme ceci:

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

(modifier: formule mise à jour - testée et cela fonctionne pour moi sur un exemple - peut-être besoin d'affiner en fonction de votre entrée)

Aerik
la source
1
+1: Je l'avais dans le presse-papiers prêt à l'emploi lorsque vous avez posté: = DATEVALUE (RIGHT (A1,2) & MID (A1, FIND ("-", A1), 5) & MID (A1,3,2))
Excellll
Hé, je n'ai jamais pensé à réorganiser les morceaux. Merci!
Craig Walker
2
8 ans et plusieurs versions d'Excel plus tard, c'est toujours la réponse la plus pertinente! Je souhaite qu'Excel puisse fournir une fonctionPARSEDATE([string_value], [date format])
Manu Manjunath
5

Notez que les noms de mois sont spécifiques aux options régionales de Windows. Donc, si vos options régionales Windows sont définies sur ukrainien, alors DATEVALUE renverrait #VALUE! pour "07-Nov-2012", mais accepterait "07-Лис-2012".

Olexa
la source
1
Note très très importante !! Il est dommage qu'Excel ne reconnaisse pas à la fois les paramètres régionaux + les noms anglais de mois / jour par défaut
athanassis
1

La fonction Excels DateValue dépend de la région. Si vous analysez une chaîne comme "04-11-2008" en Europe, celle-ci sera analysée le 4 novembre et aux États-Unis le 11 avril.

Pour contourner ce problème, vous pouvez utiliser la fonction DateSerial et effectuer l'analyse vous-même. Cela peut également être facilement adapté à votre propre format de date 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
CodeKid
la source