问题

问题

问题

日期时间单元格包含精度达到十分之一秒或更高精度的数据,但是在编辑单元格数据时,即使未进行任何更改,也会将此精度丢弃为“秒”级精度。

重新创建

显然,这其中的因素可能与地点、机器和/或用户有关,但以下内容代表了我在 2 台台式机和一台笔记本电脑上的体验,始终是 Excel 2010,英国。

  1. 在没有引号的单元格中输入“19/04/2015 13:26:15.456”(英国格式,因此大概是美国的 04/19/2015);按回车键即可接受内容。
    • Excel 决定将其格式化为“mm:ss.0”,并将其呈现为“26:15.5”
  2. 移回相关单元格尚未编辑
    • 可以看出,公式栏中的精度已“丢失”,显示为“19/04/2015 13:26:15”,没有秒的分数。但是,单元格仍然显示“26:15.5”,尾部有 .5,表明精度仍然存在。
  3. CTRL-1 并将格式从“mm:ss.0”更改为“dd/mm/yyyy hh:mm:ss.000”。现在它在单元格中正确呈现为“19/04/2015 13:26:15.456”(但公式栏中仍然没有 .456)。
  4. 这是问题的关键所在;现在按 F2,然后按 Enter;即“编辑”单元格但不进行任何更改。精度 < 1 秒将被丢弃,单元格现在显示“19/04/2015 13:26:15”。000

这意味着如果我编辑单元格的日期部分(例如将 4 月改为 5 月,或前进一年等),或者只是不小心双击它,每次我都会丢弃小数精度。有什么方法可以防止这种情况发生吗?

为了进一步证明值在变化而不仅仅是格式在变化,我在相邻的单元格中添加了一个公式,将日期呈现为小数(10dp),并且该值仅在上述第 4 步之后立即发生变化。

答案1

如果您的单元格设置日期/时间如下:

在此处输入图片描述

选择单元格并运行这个简短的宏:

Sub beforeEDIT()
    Dim s As String

    With ActiveCell
        s = .Text
        .ClearContents
        .NumberFormat = "@"
        .Value = s
    End With
End Sub

它会将单元格转换为纯文本(并保留毫秒)。然后您可以编辑单元格,更改月份或日期等。

完成编辑后,运行第二个宏将文本转换回日期/时间。

Sub afterEDIT()
    With ActiveCell
        .NumberFormat = "mm/dd/yyyy hh:mm:ss.000"
        .Value = .Value
    End With
End Sub

相关内容