VBA 日期作为整数

问题描述 投票:0回答:5

有没有办法获取 VBA 中

Date
函数的基础整数?我指的是 Excel 存储的整数,用于以天数来描述内存中的日期(当包含时间时,我猜它可以是浮点数)。不过我只对整数部分感兴趣。还有其他功能吗?

例如,对于今天(),我希望能够取回 40877..

excel vba date datetime
5个回答
44
投票

日期在 VB(A) 中不是 Integer,而是 Double。

您可以通过将日期值传递给

CDbl()
来获取日期值。

CDbl(Now())      ' 40877.8052662037 

来自文档

1900 年日期系统

在1900日期系统中,支持的第一天是1月1日, 1900。当输入日期时,日期会转换为序列号,表示经过的天数,从 1 开始 1900 年 1 月 1 日。例如,如果您输入 1998 年 7 月 5 日,Excel 将日期转换为序列号 35981。

因此,在 1900 年系统中,

40877.805...
代表 1900 年 1 月 1 日(2011 年 11 月 29 日)之后的 40,876 天,约占一天的 80.5%(约 19:19h)。 Excel 中有一个基于 1904 的系统的设置,使用此设置时数字将关闭(这是每个工作簿的设置)。

要获取整数部分,请使用

Int(CDbl(Now())) ' 40877

它将返回一个没有小数位的LongDouble(即

Floor()
在其他语言中的作用)。

使用

CLng()
Round()
会导致四舍五入,在中午 12:00 之后调用时将返回“未来的一天”,所以不要这样做。


17
投票

只需使用

CLng(Date)

请注意,您需要使用

Long
而不是
Integer
,因为当前日期的值 > 32767


1
投票
Public SUB test()
    Dim mdate As Date
    mdate = now()
    MsgBox (Round(CDbl(mdate), 0))
End SUB

1
投票

您可以使用下面的代码示例来获取日期字符串,例如 mdate 和 Now() (例如 toDay),您还可以计算两个日期之间的差异,例如 Aging

Public Sub test(mdate As String)
    Dim toDay As String
    mdate = Round(CDbl(CDate(mdate)), 0)
    toDay = Round(CDbl(Now()), 0)
    Dim Aging as String
    Aging = toDay - mdate
    MsgBox ("So aging is -" & Aging & vbCr & "from the date - " & _
    Format(mdate, "dd-mm-yyyy")) & " to " & Format(toDay, "dd-mm-yyyy"))
End Sub

注意:使用

CDate
将日期字符串转换为有效日期

我在 Office 2007 中使用它:)


0
投票

这回答了最初的问题:如果时间部分在中午之后,如何获取不会翻转到第二天的日期部分。

将 JustDate 调暗为日期

JustDate = WorksheetFunction.RoundDown(Date_and_Time_Value, 0)

© www.soinside.com 2019 - 2024. All rights reserved.