J'ai un grand fichier csv importé contenant des dates américaines dans une colonne. Je souhaite modifier ces dates au format UK (dd/mm/yyyy)
en utilisant un code. Le problème est que les dates américaines sont dans les deux "mm/dd/yyyy"
et "m/dd/yyyy"
format - ce dernier ne répond à aucune des options "cliquables" d'Excel, y compris la procédure "Text to Columns". Existe-t-il un code qui, lorsqu'il est exécuté dans la colonne adjacente, effectuera la conversion?
Vous pouvez également utiliser la fonction TEXT()
assez facilement (Remarque: les données source doivent être une valeur de date Excel)
TEXT(value, format_text)
où value
est la cellule de référence et format_text
est la façon dont vous souhaitez formater le texte - dans votre cas jj/mm/aaaa.
En supposant:
A1 = 3/17/2013
A2 = 12/27/2013
Dans B1 et B2, saisissez simplement:
B1 = TEXT(A1, "dd/mm/yyyy")
B2 = TEXT(A2, "dd/mm/yyyy")
et le résultat devrait être
A B
3/17/2013 17/03/2013
12/27/2013 27/12/2013
J'espère que ça t'as aidé.
SUGGESTION MISE À JOUR SI VOUS TRAVAILLEZ AVEC DU TEXTE:
Fractionnez la chaîne à l'aide des fonctions mid()
, left()
et right()
puis vérifiez si le mois mm comporte 1 ou 2 caractères à l'aide de la fonction LEN()
une fonction. Enfin concaténer la chaîne ensemble en utilisant les opérateurs & et /.
Essayez de coller cela en B1, cela devrait fonctionner correctement:
=MID(A1,FIND("/",A1,1)+1,2)&"/"&IF(LEN(LEFT(A1,FIND("/",A1)-1))=1,0&LEFT(A1,FIND("/",A1)-1),LEFT(A1,FIND("/",A1)-1))&"/"&RIGHT(A1,4)
Vous pouvez utiliser la fonction DATEVALUE pour convertir les chaînes de date en valeurs de données Excel, puis créer un format de date personnalisé pour afficher les valeurs de date au format britannique.
En supposant que la première chaîne de date se trouve dans la cellule A1, l'appel de fonction suivant transformera la chaîne en valeur de date.
=DATEVALUE(A1)
Vous pouvez créer le format personnalisé dd/mm/yyyy;@
en cliquant avec le bouton droit sur la cellule, en choisissant Format Cellules, Nombre, Personnalisé et en saisissant le format dans le champ Type.
Travailler avec des valeurs de date au lieu de chaînes de date vous permettra de modifier le format affiché sans avoir à effectuer des opérations de chaîne pour réorganiser les éléments de date. Il permettra également de faire des calculs arithmétiques de date, le cas échéant.
Voici un sous qui pourrait vous aider. À l'aide de la méthode QueryTables, vous pouvez spécifier qu'Excel interprète certaines colonnes de données comme une chaîne.
Sub ImportExternalCSVAsText()
'
Dim sFileName As String
sFileName = Application.GetOpenFilename("CSV files, *.csv")
With ActiveSheet.QueryTables.Add(Connection:= _
"TEXT;" & sFileName _
, Destination:=Range("$A$1"))
.Name = "CSV"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 437
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = False
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=False
End With
End Sub
Dans l'exemple, j'ai importé un fichier CSV de 3 colonnes de large et spécifié que les colonnes 2 et 3 contiennent des données de type chaîne.
.TextFileColumnDataTypes = Array(1, 2, 2) '2 denotes STRING
Si cette méthode ne fonctionne pas, faites-le moi savoir. J'ai déjà dû faire face à ce problème (en tant qu'entrepreneur américain pour un emploi sous contrat au Royaume-Uni) et je suis presque sûr d'avoir quelques fonctions autour de celles que j'utilisais à l'époque.
Cela apportera toutes les valeurs sous forme de chaîne.
Vous devrez très probablement les analyser parce que les entrées de date américaines comme "30/12/2011" échoueront la fonction DATEVALUE()
sur votre système local, et les entrées de dates américaines comme "07/05/2012 "(5 juillet 2012) serait interprété comme" 7 mai 2012 "par votre région.
Curieusement, pour ce faire, vous devez convertir une colonne de texte en une colonne de texte.
Sélectionnez la colonne contenant vos dates: jj/mm/aaaa
Les données source se transforment au format de date de votre système.
Sub USUKDateFormat()
' USUKDateFormat Macro
Selection.TextToColumns Destination:=ActiveCell.Offset(0, 2).Range("A1"), _
DataType:=xlFixedWidth, OtherChar:="/", FieldInfo:=Array(Array(0, 4), Array _
(10, 1))
End Sub
Cette fonction devrait faire l'affaire:
=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))