Comment convertir une string de date-heure DB2 en une date Excel

Je recevrai régulièrement un extrait d'une database DB / 2 avec des dates et des timestaps formatés comme ceci:

2002-01-15-00.00.00.000000 2008-01-05-12.36.05.190000 9999-12-31-24.00.00.000000 

Existe-t-il un moyen plus simple de convertir ce format en format Excel que de se décomposer avec des sous-strings?

 DB2date = DateValue(Left(a, 4) + "/" + Mid(a, 6, 2) + "/" + Mid(a, 9, 2)) 

Merci de votre aide!

Il n'est pas clair si vous parlez de fonctions de formule ou de fonctions VBA.

Fonctions de formule

N'utilisez pas la fonction DateValue, qui attend une string; utilisez la fonction Date, qui prévoit l'année, le mois et le jour numériques:

 =DATE(INT(LEFT(A1,4)),INT(MID(A1,6,2)),INT(MID(A1,9,2))) 

en supposant que la date-en-string soit en A1.

Fonctions VBA

Calcul similaire comme ci-dessus, utilisez simplement la fonction DateSerial à la place:

 dt= DateSerial(Int(Left$(dt$, 4), Int(Mid$(dt$, 6, 2)), Int(Mid$(dt$, 9, 2))) 

Je suis sûr que vous pourriez préparer quelque chose avec Regex si vous avez vraiment bien voulu. Ce ne serait pas encore «meilleur», probablement pire.

Si vous pardonner un peu de C # (je n'ai pas touché VB depuis des années, alors je ne connais plus les appels de fonctions), vous pourriez aussi:

 DB2ssortingng = "2002-01-15-00.00.00.000000"; DB2date = DateValue(DB2ssortingng.SubSsortingng(0, 10).Replace('-', '/')); 

Mais encore une fois, vous ne gagnez vraiment rien. Pouvez-vous donner un exemple de l'origine de votre code actuel?

en VBA, dateValue() peut convertir la première partie de la string en une date:

 ? dateValue("2002-01-15") 15/01/2002 

Donc, la bonne façon de l'get pour vous sera

 ? dateValue(left("2002-01-15-00.00.00.000000",10)) 

Cela vous donnera toujours la bonne réponse tant que DB2 vous donnera toujours une date "YYYY-MM-DD". Le format du résultat (dd / mm / aa, mm-ddd-aaaa, etc.) dépend des parameters locaux de votre ordinateur / parameters spécifiques de votre cellule.

Si vous souhaitez extraire la partie "time" de votre string, il existe cette fonction timeValue() qui finira par créer le travail.

Si vous souhaitez inclure les informations de time que vous avez à faire plus; DateValue l'ignore.
TimeValue peut évaluer la partie time en secondes, afin de pouvoir les append:

 = DateValue(Mid(a, 1, 10)) + TimeValue(Mid(a, 12, 8)) 

Mais votre échantillon de données présente un autre problème: il a les deux valeurs de time "00.00.00" et "24.00.00".
Le deuxième gags la fonction TimeValue, donc vous devrez coder pour le cas spécial.