我有一张电子表格,其中有一个输入日期字段。然后,该字段被放入另一个字段中,然后另一个字段仅从中获取年份。因此,输入日期、日期、年份是我的 3 个字段。数据输入人员可以随意将日期输入到输入日期字段中。比如说 3/9/89。当它将其拉到日期字段时,格式设置为 yyyy-mm-dd,因此它会将其更改为 1989-03-09。然后在年份字段中,我将代码设置为 =TEXT(A1, "yyyy"),其中它会将“1989”放入字段中。
但是...如果数据输入人员只有年份,并在输入的日期字段中输入“1989”,则会在日期字段中得到“1905-01-01”,在年份字段中得到“1905”。
我可以在代码中放入一些通用的代码(每个 DATE 框中的代码相同)来执行此操作,而无需我进入并将所有仅包含年份的字段更改为“文本”或“常规”?
答案1
可能缺少一些信息,因为它不应该按照您在问题中描述的方式工作。
以下是正在发生的事情
日期以 1900 年 1 月 0 日(1/1/1900 = 第 1 天)以来的天数形式存储。当您输入可以表示日期的字符串(如)时3/9/89
,Excel 会假定您希望将其作为日期并在内部将其转换为日期。实际输入的字符串3/9/89
不会被存储。存储的是32576
,因为 3/9/89 是自 1/0/1900 以来的第 32,576 天。
然后单元格格式决定了如何显示。由于 Excel 认为数字是日期,因此除非您选择了其他格式,否则它会使用默认日期格式。
如果您的日期单元格只是对输入单元格的单元格引用,其自定义格式为“yyyy-mm-dd”,则只会显示相同的日期,但格式不同。它仍像32576
日期单元格一样在内部存储。
您的“年份”单元格有所不同。如果您告诉它仅显示日期的年份,则使用=TEXT(A1, "yyyy")
,它会计算出第 32576 天的年份,即 1989 年,并将其存储1989
为文本字符串(并显示该字符串)。
根据问题中的描述,以下是应该如果有人进入就会发生1989
。
首先,它只是一个四位数字,无法转换为具体日期,因此 Excel 会将其解释为数字而不是日期。输入日期单元格似乎没有特定格式,因此该值显示为数字1989
。
日期单元格的格式为日期,因此 Excel 会以此格式解释值。作为日期,1989
是自 1900 年 1 月 0 日(即 1905 年 6 月 11 日)以来的第 1989 天。日期单元格应显示1905-06-11
。年份单元格计算出当天的年份1989
为 1905 年,并显示该年份。
如果您在日期单元格中看到1905-01-01
,则还有另一个步骤正在进行。这仅表示年份,没有其他日历单位(例如天或月)。这就像您将年份值转换为日期时所看到的那样。
那么如何解决呢?
- 无需更改任何内容,只需指示数据输入人员不要只输入年份。
1989
他们可以输入 ,1/1/1989
这样 Excel 就可以将其识别为日期。
Excel 具有一定的智能来识别日期,但它的作用也仅限于此。如果您希望能够输入 Excel 无法识别的内容,则需要自己提供。有无数种方法可以做到这一点,具体取决于您想要获得多么奇特的效果。一些常见的方法:
- 您可以检查输入值是否是 X 和 Y 之间的数字,其中 X 和 Y 是有效日期的年份限制。如果是,您可以从中构建日期。Excel 有一个 DATE() 函数,它接受指定的年份、月份和日期,并将其转换为 Excel 日期。例如,如果您确定输入的数字是年份,则可以将其用作年份参数,并指定
1
月份和日期。 - 您可以为年、月、日分别设置输入单元,然后根据输入构建日期。即使没有输入任何月和日(在这种情况下,您可以为它们指定一个值
1
),年份规范也始终可以被识别为年份。 - 您可以取消自由格式的输入,使用下拉菜单来选择年、月、日,然后按上述方式处理。
如果某些记录只接受年份,请确定是否真的需要某些记录的完整日期。如果不是,只需将年份值(仅)输入为数字或文本而不是日期,然后以此方式处理。两位数的年份条目可以转换为四位数字格式。这消除了整个问题。如果确实需要将年份作为日期(用于日期算术),则将其转换为日期就足够简单了。
在这种情况下,由于您知道不需要实际日期,因此您可以以不同的方式处理数据输入。让数据输入人员输入任何内容,但测试输入以查看它是否是实际日期。如果是,请立即将其转换为文本或数字年份值。