web-dev-qa-db-fra.com

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

J'essayais d'utiliser des fonctions pour obtenir le jour d'aujourd'hui sous forme de nombre dans Excel. Par exemple, quand 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 numéro de jour de <date>. C'est DAY(19/05/1984) devrait retourner 19.

Par conséquent, la formule

=DAY(TODAY())

devrait donner le résultat que je voulais.

Cependant, ce retour 18/01/1900 (en utilisant 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?

En tant que mathématicien et programmeur amateur (Maple, Java et un peu de Python), ma composition de fonctions me semble bien.

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

21
Taladris

Votre formule est correcte. c'est la façon dont Excel formate les cellules qui déroutent. Par exemple, si vous définissez manuellement une valeur de cellule sur 18, puis que vous modifiez le format en une date, le résultat s'affiche sous la forme January 18, 1900.

Si vous modifiez le format de la cellule avec votre formule en "Général", le résultat attendu devrait s'afficher.

40
apple9321

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 heures dans Excel

Dans Excel, les nombres sont utilisés pour représenter des 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 allant d'un argument numérique à un résultat numérique.

Dans votre cas, DAY (TODAY ()) a correctement renvoyé 18 (un nombre) que je suppose que vous avez affecté à une cellule qui est formatée pour afficher une date sous forme abrégée, de sorte que 18 s'affiche sous la forme 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, la réponse s'affiche comme vous le souhaitiez, à savoir 18.

9
Spike0xff

Rien ne va pas avec votre formule. Ce que je voudrais vous suggérer, si la formule ne donne pas le résultat attendu, cela produit alors soit une erreur, soit un résultat incorrect. Puisque vous n’avez pas mentionné ce que la formule a fait cuire!.

En attendant, j'aimerais vous montrer quelles sont les possibilités d'obtenir la valeur DAY dans Number in Excel.

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

Get Day in Number

NB:

La date est dans la cellule E166 . La 2ème colonne F contient des résultats et la 3ème colonne G indique la formule pour laquelle j'ai utilisé.

Vous pouvez également utiliser la fonction TEXT pour obtenir la valeur Day sous forme de données Text.

La valeur est ROUGE. La couleur a le format de cellule personnalisée JJ. 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 depuis que vous avez mentionné que, fondamentalement, vous n'êtes pas un utilisateur Excel.

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

2
Rajesh S

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

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

Le système de date de 1900

Dans le système de date 1900, le premier jour pris en charge est le 1er janvier 1900. Lorsque vous entrez une date, celle-ci est convertie en un numéro de série représentant 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 tableurs, tels que Lotus 1-2-3, conçus pour s'exécuter sous MS-DOS ou Microsoft Windows.

Le système de date de 1904

Dans le système de dates 1904, le premier jour pris en charge est le 1er janvier 1904. Lorsque vous entrez une date, celle-ci est convertie en un numéro de série représentant 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- système dans Excel

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

La solution simple sur le front-end consiste à changer le format de votre cellule en quelque chose d'autre comme Number ou General . Cela indiquera à Excel de l’afficher sous forme d’entier, au lieu d’essayer de l’interpréter comme un numéro de série. À 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 nous indiquant si la quinzième est passée ou non le 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 avec une série de dates. La fonction DAY renvoyant un entier devient donc plus utile dans le contexte des cas d'utilisation courants d'Excel.

1
Skoddie