我在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代码
答案 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
除非您要处理大量的日期,否则上面的内容应该没问题。如果没有,则可以改进循环的内部逻辑。
(smallestDate
和largestDate
不可能在同一循环迭代中都被分配/更改,因此应使用If-Elseif-End If
将它们放在单独的(互斥)分支上而不是函数Max
和Min
。这样,当前日期只被比较一次。)