Excel如何处理功能组合?


21

我试图使用函数来获取今天的日期作为Excel中的数字。例如,当我写这个问题时,我应该获得18美元。

我尝试使用:

  1. 该函数TODAY()以日期格式返回今天的日期。
  2. Day(<date>)返回的天数<date>。那DAY(19/05/1984)应该返回19。

因此,公式

=DAY(TODAY())

应该给出我想要的结果。

但是,此返回18/01/1900(今天使用该函数时)

如果我用

=TODAY()

在单元格A1中,然后

=DAY(A1)

在另一个单元格中,我得到了正确的结果。

为什么DAY(TODAY())没有给出预期的结果?

从我的数学家和业余程序员的背景(使用Maple,Java和某些Python)开始,我的函数组合似乎还不错。

更一般而言,Excel如何处理公式的组成?


11
正确答案是“严重”。
卡尔·威索夫特

Office对Excel函数的支持 ..它甚至说:=DAY(TODAY())...返回每月的当前日期(
1-31

Answers:


40

您的公式是正确的;Excel格式化单元格的方式令人困惑。例如,如果您手动将单元格值设置为18,然后将格式更改为日期,它将显示为January 18, 1900

如果将公式的单元格格式更改为“常规”,它将显示您期望的结果。


3
这可能有助于解释为什么格式化要这样做。Excel将时间戳存储为“自1900年1月0日00:00:00起的天数”,其中小时,分钟和秒为小数点(1900年1月1日中午为“ 1.5”)。
卡尔·凯文森

一旦使用任何类型的日期/时间值,Excel就会默认使用日期或时间格式。那可以是另一个像这样格式化的单元格,也可以是像这样的函数TODAY()。当您仅在分解功能中使用它们并且必须将格式切换回去时,确实很烦人。
棘轮怪胎

1
切线相关:sciencemag.org/news/2016/08/… [五分之一的遗传学论文由于Microsoft Excel而导致错误]
达伦·林格

@DarrenRinger我经常将其理解为“责备他们的工具”-该论文的重点是保持警惕。我发生了类似的事情(尽管不是遗传学),和其他所有人一样,我认为“ Excel将该数字更改为....”,而我应该告诉自己“该死,我没有考虑到该数字会发生变化。到.....“
达伦·巴特鲁普·库克

9

我认为您可能会误以为Excel会操纵“日期”值:事实并非如此。

如何在Excel中使用日期和时间

在Excel中,数字用于表示日期(自1900年1月0日以来可能的小数天数),但是它们被Excel作为数字进行存储和操作。TODAY()是一个数值函数,而DAY()是一个从数字参数到数字结果的函数。

在您的情况下,DAY(TODAY())正确返回18(一个数字),我想您已将其分配给一个格式化为以短格式显示日期的单元格-这样18会显示为18/01/1900。因为对于Excel,将18解释为日期,这就是它的意思。

如果您将该单元格格式化为数字格式,则会看到以预期方式显示的答案,即18。


2

您的公式没什么问题。我想向您建议的是,如果公式未产生预期的结果,则它会产生错误或错误的结果。由于您尚未提及该配方的确具有烹调作用!

同时,我想向您展示在Excel中用Number获得DAY值的可能性。

检查下面的屏幕截图。

获取日数

注意:

日期在单元格E166中第二列F得到结果,第三列G显示出我所使用的公式。

您还可以使用TEXT函数获取Day值作为Text数据。

值是红色颜色具有自定义单元格格式DD,您可以在单元格上应用以仅显示日期的天值。

注意,由于您已经提到您基本上不是Excel用户,因此我为您提供了所有可能。

希望这对您有所帮助,不要忘记发布公式给出的错误。


1

您的公式构成正确。意外的结果是由于Excel如何存储不同类型的数据。

根据工作簿级别的设置,Excel使用两种类似的系统来存储日期。

1900年日期系统

在1900年日期系统中,支持的第一天是1900年1月1日。输入日期时,该日期将转换为代表自1900年1月1日以来经过的天数的序列号。例如,如果输入1998年7月5日,Excel将日期转换为序列号35981。

默认情况下,Microsoft Excel for Windows使用1900日期系统。1900年的日期系统使Excel和其他设计为在MS-DOS或Microsoft Windows下运行的电子表格程序(例如Lotus 1-2-3)之间具有更好的兼容性。

1904年日期系统

在1904年日期系统中,支持的第一天是1904年1月1日。输入日期时,该日期将转换为代表自1904年1月1日以来经过的天数的序列号。例如,如果输入1998年7月5日,Excel会将日期转换为序列号34519。

默认情况下,Macintosh的Microsoft Excel使用1904年日期系统。由于早期Macintosh计算机的设计,不支持1904年1月1日之前的日期。此设计旨在防止与1900年不是a年有关的问题。如果您切换到1900日期系统,则Macintosh的Excel确实支持早于1900年1月1日的日期。

这些摘录摘自:https : //support.microsoft.com/en-us/help/214330/differences-between-the-1900-and-the-1904-date-system-in-excel

序列号是对自1900年1月1日以来的日期数的简单计算,包括1900年2月29日的虚假日期。不过,DAY函数也可以视为数据类型转换函数。它以日期序列号作为输入,并返回整数作为输出。在您的示例中,如果我们认为18代表一个日期序列,并且算出从1900年1月1日起的18天,那么我们将以1900年1月18日结束。

前端的简单解决方法是将单元格格式更改为NumberGeneral。这将告诉Excel将其显示为整数,而不是尝试将其解释为日期序列。在后端,一切都很好。整数结果可以在任何其他公式中使用,并且将正常运行。

例如,假设我们要创建一个条件公式,该公式告诉我们本月15日是否已经过去。我们可以使用:

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

使用日期序列来完成相同的结果要困难得多,因此返回整数的DAY函数最终在Excel的常见用例环境中更加有用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.