web-dev-qa-db-fra.com

Formatage de date Excel

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?

16
Mary

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)

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)

26
rg144

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.

3
chuff

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.

2
David Zemens

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

  • Sous Données, sélectionnez le texte dans les colonnes
  • Sélectionnez une largeur fixe
  • Prochain
  • Définir le diviseur de largeur de colonne après l'année (aaaa)
  • Au format de données de colonne
  • Dérouler sélectionner mm/jj/aaaa (le format source)
  • Sélectionner la destination
  • Terminer

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 
1
MaryPat

Cette fonction devrait faire l'affaire:

=CONCATENATE(MID(B2,SEARCH("/", B2,1)+1,2), "/",LEFT(B2,SEARCH("/", B2,1)-1), "/", RIGHT(B2,4))
1
SteveP