![表格列具有非标准日期格式,但 Excel 无法识别该格式的日期](https://linux22.com/image/1540848/%E8%A1%A8%E6%A0%BC%E5%88%97%E5%85%B7%E6%9C%89%E9%9D%9E%E6%A0%87%E5%87%86%E6%97%A5%E6%9C%9F%E6%A0%BC%E5%BC%8F%EF%BC%8C%E4%BD%86%20Excel%20%E6%97%A0%E6%B3%95%E8%AF%86%E5%88%AB%E8%AF%A5%E6%A0%BC%E5%BC%8F%E7%9A%84%E6%97%A5%E6%9C%9F.png)
答案1
这里有两个不同的问题。单元格格式告诉 Excel 如何显示输入的信息。它确实不是影响 Excel 如何解释您输入到空白单元格的数据。
因此如果你输入:
25.12.3
进入单元格后,Excel 会将其转换为字符串。要获取日期,您必须输入:
25/12/2003
如果你的语言环境是日月年。
通过检查公式栏可以更容易地了解正在发生的事情。
答案2
Excel 使用 Windows 来了解您是否输入了日期。它通过将您输入的模式与您(或您的用户)的 Windows 设置中建立的模式进行比较来了解您是否输入了日期。
例如,如果您的 Windows 设置的日期格式为“dd.m.yy”,并且您输入“31.12.21”,则 Excel 会将该字符模式与 Windows 设置的模式进行匹配,并发现它可能是一个日期,因此它会将条目记录为“2021 年 12 月 31 日”。
这通常是某些人想要的。如果某人在给定计算机上的所有使用都需要上述格式,那么它就很好用。但是,有时情况并非如此,我的意思是他们通常需要不同的 Windows 格式(为此,我们假设为“dd/mm/yyyy”),而 EXCEL 需要上述格式。特殊需求通常是出于某种原因而需要某种格式,这种格式不同于一般的国家格式。
听起来您有这个问题。除了在宏中编写代码(VBA、Javascript 等)之外,还有一种且只有一种方法可以实现此问题,该宏会检查相关单元格区域中的任何条目是否具有该确切模式,并将其处理为日期(让 Excel 从那里处理)或日期值,因此不存在 Excel 处理不当的问题。
那就是更改您和/或您用户的 Windows 日期设置以匹配此格式。您似乎不太可能这样做,甚至也不想这样做,因为这意味着计算机上的所有其他程序都会受到影响。
“要点”是:只有 Windows 的日期格式才能被 Excel 识别为日期条目。Excel 中输出的任何格式都不会影响它如何解释和处理输入。
没有其他方法可以让 Excel 将此精确的按键输入模式识别为日期。
解决方法是使用我提到的“On Enter”类型的宏,这样可以进行输入,然后根据需要立即更改并重写单元格。因此,精确的输入将被替换,因此人们可能不喜欢这样,但结果的外观将是上述内容,而用户仍然使用他们熟悉的模式(或喜欢的模式,无论原因是什么)。
没有其他方法可以对 Excel 不认为是日期的条目采取行动,然后强制 Excel 这样做。例如,可以使用辅助列方法,或单独的数据输入区域,其中输入的内容按预期完成但不被视为日期,而人们使用它们的单独输出区域会按惯例将字符串拆分并重新组合,以便 Excel 将其视为日期,然后将其格式化为您想要的格式。
为什么会发生这种情况?正如您所说,在某个时候它就停止工作了。我最有可能的猜测是,使用该文件的计算机的 Windows 设置已更改以适应这种情况……很久以前,在“其他人实现了这一点,并且在您接管时没有传递该部分”的世界里。然后他们开始被替换,而进行替换的 IT 工作人员不知道某些单一用途需要特定的非标准 Windows 日期设置,并将它们与标准设置放在一起。(公平地说,那些笨蛋从不传输任何设置,所以您能做的最好的事情就是让相关人员进行更改……IT 人员永远不会处理它。)
因此,让所有 Windows 默认日期格式更改都可接受,使用解决方法(可能是我提到的两种方法之一),或者忍受它。
我确实明白“忍受它”可能需要重写“一些”公式,以便以不同于现在的方式从输入的日期中提取信息。这可能并非易事。但是,如果您无法进行上述更改并且必须忍受它,那么您就必须这样做。最有可能造成麻烦的方式是使用字符串操作处理原始日期条目,而不是使用实际的日期函数。