Comment Excel gère-t-il la composition des fonctions?


21

J'essayais d'utiliser des fonctions pour obtenir le jour d'aujourd'hui sous forme de nombre dans Excel. Par exemple, lorsque j'ai écrit cette question, j'aurais dû obtenir 18 $.

J'ai essayé d'utiliser:

  1. la fonction TODAY()qui renvoie la date du jour dans un format de date.
  2. Day(<date>)qui renvoie le nombre de jours de <date>. Cela DAY(19/05/1984)devrait renvoyer 19.

Par conséquent, la formule

=DAY(TODAY())

devrait donner le résultat que je voulais.

Cependant, ce retour 18/01/1900 (lors de l'utilisation de la fonction aujourd'hui)

Si j'utilise

=TODAY()

dans la cellule A1, puis

=DAY(A1)

dans une autre cellule, j'obtiens le bon résultat.

Pourquoi DAY (TODAY ()) ne donne-t-il pas le résultat attendu?

De par mon expérience de mathématicien et de programmeur amateur (en Maple, Java et certains Python), ma composition de fonctions semble correcte.

Plus généralement, comment Excel gère-t-il la composition des formules?


11
La bonne réponse est «mal».
Carl Witthoft

Support Office pour les fonctions Excel .. il dit même: =DAY(TODAY())... Renvoie le jour du mois en cours (1 - 31) ..
txtechhelp

Réponses:


40

Votre formule est correcte; c'est la façon dont Excel met en forme les cellules qui prête à confusion. Par exemple, si vous définissez manuellement une valeur de cellule sur 18puis changez le format en une date, il l'affichera comme January 18, 1900.

Si vous modifiez le format de la cellule avec votre formule en "Général", il devrait afficher le résultat que vous attendez.


3
Cela pourrait aider à expliquer pourquoi le formatage fait cela. Excel stocke les horodatages en tant que "jours depuis 00:00:00 le 0 janvier 1900", avec les heures, les minutes et les secondes en décimales d'un jour (midi le 1er janvier 1900 est "1,5").
Carl Kevinson

De plus, Excel utilisera par défaut la mise en forme de la date ou de l'heure dès qu'un type de valeur de date / heure sera utilisé. Cela peut être soit une autre cellule qui est formatée comme ça ou qui fonctionne comme TODAY(). Vraiment ennuyeux lorsque vous les utilisez uniquement dans les fonctions de décomposition et que vous devez revenir en arrière.
monstre à cliquet

1
Tangentiellement pertinent: sciencemag.org/news/2016/08/… [Un article sur cinq sur la génétique contient des erreurs grâce à Microsoft Excel]
Darren Ringer

@DarrenRinger J'ai toujours lu cela comme "blâmer leurs outils" - le point clé du document étant et restant vigilant . La même chose m'est arrivée (mais pas sur la génétique) et comme tout le monde je pense que "Excel a changé ce chiffre en ....", alors que je devrais me dire "putain, je n'ai pas pris en compte que ce chiffre allait changer à ..... "
Darren Bartrup-Cook

9

Je pense que vous pourriez être confus en pensant qu'Excel manipule les valeurs de «date»: ce n'est pas le cas.

Comment utiliser les dates et les heures dans Excel

Dans Excel, les nombres sont utilisés pour représenter les dates (le nombre éventuellement fractionnaire de jours depuis le 0 janvier 1900), mais ils sont stockés et manipulés par Excel sous forme de nombres. TODAY () est une fonction à valeur numérique et DAY () est une fonction d'un argument numérique à un résultat numérique.

Dans votre cas, DAY (TODAY ()) a correctement renvoyé 18 (un nombre) que j'imagine que vous avez attribués à une cellule qui est formatée pour afficher une date sous forme abrégée - de sorte que 18 s'affiche comme 18/01/1900. Parce que pour Excel, quand 18 est interprété comme une date, c'est ce que cela signifie.

Si vous formatez cette cellule au format numérique, vous verrez la réponse affichée de la manière attendue, c'est-à-dire 18.


2

Il n'y a rien de mal avec votre formule. Ce que je voudrais vous suggérer, si la formule ne produit pas le résultat attendu, elle produit soit une erreur, soit un résultat incorrect. Puisque vous n'avez pas mentionné ce que la formule a à cuisiner!.

En attendant, je voudrais vous montrer quelles sont les possibilités d'obtenir la valeur JOUR en nombre dans Excel.

Vérifiez la capture d'écran ci-dessous.

Obtenez le jour en nombre

NB:

La date est dans la cellule E166 . La 2e colonne F donne des résultats et la 3e colonne G montre la formule que j'ai utilisée.

Vous pouvez également utiliser la fonction TEXTE pour obtenir la valeur du jour sous forme de données texte.

La valeur est ROUGE La couleur a un format de cellule personnalisé DD, vous pouvez appliquer sur la cellule (S) pour afficher uniquement les valeurs de jour de la date (S).

Remarque, je vous ai suggéré toutes les possibilités car vous avez mentionné que, fondamentalement, vous n'êtes pas un utilisateur d'Excel.

J'espère que cela vous aidera, n'oubliez pas de publier l'ERREUR que votre formule a donnée.


1

Votre formule est composée correctement. Le résultat inattendu est dû à la façon dont différents types de données sont stockés par Excel.

Il existe deux systèmes similaires qu'Excel utilise pour stocker des dates, en fonction d'un paramètre de niveau de classeur.

Le système de date 1900

Dans le système de date 1900, le premier jour pris en charge est le 1er janvier 1900. Lorsque vous entrez une date, la date est convertie en un numéro de série qui représente le nombre de jours écoulés depuis le 1er janvier 1900. Par exemple, si vous entrez le 5 juillet 1998, Excel convertit la date en numéro de série 35981.

Par défaut, Microsoft Excel pour Windows utilise le système de date 1900. Le système de date 1900 permet une meilleure compatibilité entre Excel et d'autres programmes de feuille de calcul, tels que Lotus 1-2-3, qui sont conçus pour s'exécuter sous MS-DOS ou Microsoft Windows.

Le système de date de 1904

Dans le système de date 1904, le premier jour pris en charge est le 1er janvier 1904. Lorsque vous entrez une date, la date est convertie en un numéro de série qui représente le nombre de jours écoulés depuis le 1er janvier 1904. Par exemple, si vous entrez le 5 juillet 1998, Excel convertit la date en numéro de série 34519.

Par défaut, Microsoft Excel pour Macintosh utilise le système de date 1904. En raison de la conception des premiers ordinateurs Macintosh, les dates antérieures au 1er janvier 1904 n'étaient pas prises en charge. Cette conception visait à éviter les problèmes liés au fait que 1900 n'était pas une année bissextile. Si vous passez au système de date 1900, Excel pour Macintosh prend en charge les dates dès le 1er janvier 1900.

Ces extraits sont extraits de: https://support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel

Le numéro de série est un simple décompte du nombre de dates depuis le 1er janvier 1900, y compris la date fictive du 29 février 1900. La fonction JOUR, cependant, peut également être considérée comme une fonction de conversion de type de données. Il prend un numéro de série de date en entrée et renvoie un entier en sortie. Dans votre exemple, si nous considérons 18 comme représentant une date en série et comptons 18 jours à partir du 1er janvier 1900, nous nous retrouvons avec le 18 janvier 1900.

La solution simple sur le frontal est de changer votre format de cellule en quelque chose d'autre comme Number ou General . Cela indiquera à Excel de vous l'afficher sous forme d'entier, plutôt que d'essayer de l'interpréter comme une série de dates. À l'arrière, tout est bon pour aller. Le résultat entier peut être utilisé dans n'importe quelle autre formule et se comportera correctement.

Par exemple, supposons que nous voulions créer une formule conditionnelle qui nous indique si le 15 s'est écoulé ou non au cours du mois en cours. Nous pouvons le faire en utilisant:

=IF(DAY(TODAY())>15,"The 15th has passed","It is not yet the 15th")

Il serait beaucoup plus difficile d'obtenir le même résultat en utilisant une série de dates, de sorte que la fonction DAY renvoyant un entier finit par être plus utile dans le contexte des cas d'utilisation courants d'Excel.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.