Comment obtenir la valeur affichée d'une cellule dans MS Excel (pour un texte converti en dates)?
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.
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
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
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.
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 espaceINDIRECT(ADDRESS(ROW(),5))
- récupère la valeur indirectementVALUE()
- récupère la "valeur" de la cellule - contrairement à ce que je veuxTEXT()
- peut spécifier explicitement le format mais ne peut toujours pas le faire fonctionnerCELL()
- 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.
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.
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
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é.