如何从日期列中获取格式为“ 01/01/2019 09:01:00 AM”的最早日期和最新日期?

时间:2019-08-25 00:03:18

标签: excel vba

我在excel中有一列,其日期为以下格式。

当我使用worksheet.cells(row,col)读取数据时,它是字符串格式

8/10/2019 9:01:00 AM 2019/8/6上午9:01:00 8/22/2019 9:01:00上午 8/18/2019 9:01:00上午 8/14/2019 9:01:00 AM

目标是获取最早的日期和最新的日期,并使用它们过滤另一个Excel。

是否有更简单的方法从日期列中获取两个日期?

对于上面的示例,我想要最早的日期= 08/06/2019和最新的日期= 08/22/2019

我没有广泛使用VBA,这是我第一次使用,并且我正在更新现有的VBA代码

1 个答案:

答案 0 :(得分:0)

说类似日期的字符串在单元格A1:A10中(例如)。


使用数组公式

使用CTRL + SHIFT + ENTER输入下面的公式应分别为您提供最小日期和最大日期。

=MIN(DATEVALUE(A1:A10))
=MAX(DATEVALUE(A1:A10))

使用VBA

Option Explicit

Sub MinAndMaxDates()
    Dim sourceSheet As Worksheet
    Set sourceSheet = ThisWorkbook.Worksheets("Sheet2")

    Dim inputArray() As Variant
    inputArray = sourceSheet.Range("A1:A10") ' For example

    Dim smallestDate As Date
    smallestDate = CDate(inputArray(1, 1))

    Dim largestDate As Date

    Dim rowIndex As Long
    For rowIndex = LBound(inputArray, 1) To UBound(inputArray, 1)
        inputArray(rowIndex, 1) = CDate(inputArray(rowIndex, 1)) ' Or could use DateValue
        smallestDate = Application.Min(smallestDate, inputArray(rowIndex, 1))
        largestDate = Application.Max(largestDate, inputArray(rowIndex, 1))
    Next rowIndex
End Sub

除非您要处理大量的日期,否则上面的内容应该没问题。如果没有,则可以改进循环的内部逻辑。

smallestDatelargestDate不可能在同一循环迭代中都被分配/更改,因此应使用If-Elseif-End If将它们放在单独的(互斥)分支上而不是函数MaxMin。这样,当前日期只被比较一次。)