VBA/Excel 中的最早日期为 00:00:00

Posted

技术标签:

【中文标题】VBA/Excel 中的最早日期为 00:00:00【英文标题】:Earliest date in VBA/Excel gives 00:00:00 【发布时间】:2018-09-22 13:36:36 【问题描述】:

我有一组从数据透视表中提取的日期(可以直接从 PT 访问,或者我可以将其复制到新工作表中 - 我并不担心),我需要最早和最晚的日期例如

预定日期 2017 年 1 月 1 日 2017 年 5 月 8 日 2016 年 8 月 11 日 2016 年 3 月 12 日 ...

所以我只想让 VBA 告诉我最早的日期是 16 年 8 月 11 日,最晚的是 17 年 5 月 8 日(这是循环通过不同版本的不同评估的宏的一部分,所以手动修复是不够的,模型太大了,工作表中的数组公式会使它变得非常慢)。

到目前为止,我已经尝试了以下最早日期:

Dim AllDates As Variant
Dim NumberDates As Integer
Dim Earliest As Date, Latest As Date

Set AllDates = ThisWorkbook.Sheets("Pivot Table 5 - To Use").Range("A4:A203")

'Attempt 1
Earliest = WorksheetFunction.Min(AllDates)

'Attempt 2
Earliest = Format(Application.Min(AllDates), "dd/mm/yyyy")

'Attempt 3
Earliest = Format(WorksheetFunction.Min(AllDates), "dd/mm/yyyy")

'Attempt 4
Debug.Print CDate(Application.Max(AllDates))

每次尝试都会导致“00:00:00”,所以我假设我实际上是在使用日期值(我仔细检查并确保工作表的格式设置为正确的日期格式),但除此之外,我完全被难住了.

【问题讨论】:

当您说每次尝试都会导致“00:00:00”时,您是指最早和最晚吗?他们都?此外,您能否访问获取数据透视表的原始数据源?尝试获取该数据中最早和最新的数据,而不是数据透视表。 A4:A203范围内是否有空值? CDate(Application.Min(AllDates)) 为我工作,仅供参考。可能跟地域设置有关 如果 Min Max 得到 0,那么您的日期将作为文本存储在数据透视表中。 单元格格式不会影响单元格中的实际内容。选择日期列,选择 Data - Text to Columns,选择 Delimited,然后在下一步中清除所有分隔符,然后在最后一步中选择 Date 并指定顺序(DMY、MDY 等),然后按 Finish。这应该将它们转换为真实日期。 【参考方案1】:

这对我有用:

Sub test()

Dim Earliest As Date
Dim Latest As Date

AllDates = "$A$2:$A$204"

Earliest = Application.WorksheetFunction.Min(ActiveSheet.Range(AllDates))
Latest = Application.WorksheetFunction.Max(ActiveSheet.Range(AllDates))

MsgBox Earliest & Chr(13) & Latest

End Sub

【讨论】:

以上是关于VBA/Excel 中的最早日期为 00:00:00的主要内容,如果未能解决你的问题,请参考以下文章

VBA Excel宏保存为带有日期的单元格的一部分

VBA Excel 中的子或函数

将小时列转换为日期时间失败

如何按日期排序数组并计算离子2

VBA Excel在单元格中分隔日期范围

在 VBA (Excel) 中获取时区信息