gpt4 book ai didi

excel - 将日期从 Excel VBA 写入工作表会给出错误的值

转载 作者:行者123 更新时间:2023-12-02 06:50:32 25 4
gpt4 key购买 nike

当我将 VBA 中的日期写入 Excel 工作表时,有时工作表上的值最终会比我预期的值少 1(早一天)。下面是我在多台计算机上使用 Excel 2003、2007 和 2010 进行测试的示例。在立即窗口中:

?Format(41652.9999999963, "yyyy-mm-dd hh:mm:ss")

> 2014-01-14 00:00:00

[A1].value = CDate(41652.9999999963)
?Format([A1].value, "yyyy-mm-dd hh:mm:ss")

> 2014-01-13 00:00:00

[A1].value = CDbl(CDate(41652.9999999963))
?Format([A1].value, "yyyy-mm-dd hh:mm:ss")

> 2014-01-14 00:00:00

到底是什么触发了这个?

编辑:

好吧,让我更清楚地说明一下,这不是舍入问题。如果我向上或向下移动一小部分秒,我就会得到正确的时间。只是,如果我接近这个确切数字,日期就会推迟一整天:

[A1].value = CDate(41652.99999)
?Format([A1].value, "yyyy-mm-dd hh:mm:ss")

> 2014-01-13 23:59:59

[A1].value = CDate(41652.999999999996)
?Format([A1].value, "yyyy-mm-dd hh:mm:ss")

> 2014-01-13 00:00:00

[A1].value = CDate(41652.999999999997)
?Format([A1].value, "yyyy-mm-dd hh:mm:ss")

> 2014-01-14 00:00:00

[A1].value = CDate(41653.00001)
?Format([A1].value, "yyyy-mm-dd hh:mm:ss")

> 2014-01-14 00:00:01

最佳答案

如 CDate 帮助中所述,“CDate 识别日期文字和时间文字以及可接受日期范围内的一些数字。将数字转换为日期时,整个数字部分将转换为日期。数字的任何小数部分都会转换为一天中的时间,从午夜开始。”它从未说过四舍五入到第二天的时间会增加日期!我相信这可以解决这个谜团。

事实上,您可以自己使用 round 来获得所需的结果。测试表明 9 位数字是舍入的最高数字,10 位数字会产生不良效果...

ex [a1]=cdate(round(41652.9999999999,8)) --> 14/01/14 00:00

[a1]=cdate(round(41652.9999999999,10)) --> 13/01/14 00:00

在注释后添加代码:

Sub dower() 

Dim v1 As Double, vdt As Date, vv As Variant, vdbl As Double
Range("a1:a6").ClearContents

v1 = 41652.9999999996
vdt = CDate(v1)
vv = CDate(v1)
vdbl = CDate(v1)

[a1] = v1
[a2] = vdt
[a3] = vv
[a4] = vdbl

vdt = CDbl(v1)
[a5] = vdt

End Sub

关于excel - 将日期从 Excel VBA 写入工作表会给出错误的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21245517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com