【问题标题】:Earliest date in VBA/Excel gives 00:00:00VBA/Excel 中的最早日期为 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。这应该将它们转换为真实日期。

标签: vba excel date minimum


【解决方案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

【讨论】:

    猜你喜欢
    • 2013-06-09
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    相关资源
    最近更新 更多