web-dev-qa-db-fra.com

Comment obtenir la valeur affichée d'une cellule dans MS Excel (pour un texte converti en dates)?

Comment obtenir la valeur affichée d'une cellule dans MS Excel (pour un texte converti en dates)?

Origine du fichier Excel

J'ai un fichier Excel qui était à l'origine un fichier CSV. Pour l'instant, je n'ai pas accès au fichier CSV d'origine. Lorsque le fichier CSV a été initialement ouvert dans Excel, de nombreuses cellules de la colonne Date ont été automatiquement converties.

Exemple de valeurs

Voici un exemple d'éléments de la colonne Date (l'espacement représente les cellules alignées à gauche et à droite, principalement pour indiquer que la deuxième date n'a pas été convertie):

pièce 1:

        3/1/71
12/01/1882
Fall 1988
          1993

Et si je choisis une de ces cellules et que je clique avec le bouton droit de la souris et que je sélectionne le formatage, les choses seront différentes:

m/d/yy
General
General
General

Logique possible

On dirait donc qu'Excel n'a pas converti la date du 12/01/1882 - peut-être parce qu'il est "trop ​​vieux" ou peut-être pour une autre raison.

Si je sélectionne toute la colonne et la modifie en "Général", elle me donne ceci (texte aligné à gauche, chiffres alignés à droite):

       25993
12/01/1882
Fall 1988
        1993

Ce que je veux

J'aimerais avoir une colonne où le format est défini sur "Général" ou "Texte" et les dates affichées à partir de , pièce 1 au dessus de.

J'ai vu cette question comment utiliser une classe DataFormatter (qui ressemble à Java?) Et des questions similaires utilisant des macros et VB scripts - mais si possible, j'aimerais vraiment pouvoir utiliser une fonction Excel pour le faire.

Ce que j'ai essayé

J'ai essayé d'utiliser ces choses qui n'ont pas fonctionné:

CONCATENATE - pour obtenir le champ de date et le précéder d'un espace
INDIRECT(ADDRESS(ROW(),5)) - récupère la valeur indirectement
VALUE() - récupère la "valeur" de la cellule - contrairement à ce que je veux
TEXT() - peut spécifier explicitement le format mais ne peut toujours pas le faire fonctionner
CELL() - peut être utilisé pour obtenir des informations sur la cellule telles que le "contenu" - pas de chance, mais j’ai vu que je pouvais aussi l’utiliser pour obtenir format qui me dirait si la cellule est affichée sous forme de numéro ou en tant que "général" qui pourrait alors éventuellement être utilisé avec une fonction IF afin de convertir un nombre affiché sous forme de date en une date réelle ... éventuellement?

Méthode de copie par collage

Une méthode que j’ai vue et qui semble fonctionner consiste à sélectionner les valeurs, à les copier et les coller dans le bloc-notes, puis à les copier-coller dans Excel (cela donne effectivement la valeur affichée - ce que je veux).

Le seul problème est que je voudrais avoir une fonction pour le faire car la feuille Excel contient quelques centaines de milliers de lignes.

7
cwd

Si vous nous avez montré la gamme complète de formats possibles, cela devrait fonctionner:

=TEXT(A1, IF(CELL("format",A1)="D4", "m/d/yy", "General"))

Si vous avez des formats de date autres que m/j/aa, ajoutez des tests pour ces formats.

4
Scott

Une réponse générale:

Plutôt que d'essayer de traiter avec les résultats de la fonction CELL ("format" ...), il peut être plus facile d'utiliser une fonction définie par l'utilisateur pour renvoyer directement la propriété NumberFormat de la cellule.

Dans ce cas, l'expression "= TEXT (A1, NumberFormat (A1))" vous donnerait la valeur affichée plutôt directement.

Pour l'activer, vous avez besoin des éléments suivants dans un module de la feuille de calcul:

  Public Function NumberFormat(CellRange As Range) As String

  NumberFormat = CellRange.NumberFormat

  End Function
6
NickNaylor

La même réponse mais avec une fonction différente (qui a fonctionné pour moi):

Public Function DisplayText(ByVal pRange As Range) As String  
  DisplayText = pRange.Text  
End Function  

Il suffit d'utiliser = DisplayText (A1). Si vous modifiez le format de cellule, cette fonction renverra le texte affiché.

3
alvaroc