繁体   English   中英

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

[英]How to get earliest date and latest date from a Date Column which has values in the format “01/01/2019 09:01:00 AM”?

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

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

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

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

有没有一种简单的方法可以从date列中获取两个日期?

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

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

假设日期类型的字符串位于单元格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 。这样的当前日期仅被比较一次。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM