EDIT: На основе ответов я был в состоянии получить мин/макс даты из диапазона:Сравнение дат с форматом конкретных даты и времени (VBA)
Dim dt As Date
dt = WorksheetFunction.Min(Range("D2:D300"))
Но это не достаточно. Как использовать эту функцию с массивом вместо диапазона?
Оригинальный пост: У меня есть следующие столбцы:
формат: DD/MM/YYYY HH: MM
Я пытаюсь получить скорое DateTime от столбца 1 и последнего времени datetime от второго столбца. В этом случае:
02/01/2017 6:07 (earlist даты и времени из первой колонки, 2 января)
02/02/2017 14:11 (последняя DateTime из второго столбца, 2 февраля)
у меня есть многомерный массив (MyData) со значениями из клеток и мои функции это те:
Private Function GetLatestDateFromData() As String
Dim latestDate As String
Dim i As Long
latestDate = myData(1, ColumnsIndex(3) - 1)
For i = 1 To UBound(myData, 1) - 1
If latestDate < myData(i, ColumnsIndex(3) - 1) Then
latestDate = myData(i, ColumnsIndex(3) - 1)
End If
Next
GetLatestDateFromData = latestDate
End Function
Private Function GetEarliestDateFromData() As String
Dim earliestDate As String
Dim i As Long
earliestDate = myData(1, ColumnsIndex(2) - 1)
For i = 1 To UBound(myData, 1) - 1
If earliestDate > myData(i, ColumnsIndex(2) - 1) Then
earliestDate = myData(i, ColumnsIndex(2) - 1)
End If
Next
GetEarliestDateFromData = earliestDate
End Function
проблема в том, что мои результаты следующие:
startingFrom = DateValue(GetEarliestDateFromData) 'returns 01/02/2017, 1st of February
untilDate = DateValue(GetLatestDateFromData) 'returns 01/06/2017, 1st of June
У меня возникла проблема с форматированием даты. Так или иначе, дни и месяцы смешаны. Как это исправить?
Благодаря
EDIT: DateSerial
(как это было предложено в связанном потоке) не применяется здесь, потому что я не только заботиться о дате, но время, как хорошо. DateSerial
в качестве аргументов принимает только год-месяц-день.
Возможный дубликат [VBA обращенного формат строки до даты] (http://stackoverflow.com/questions/20672875/vba-convert-string-to-date-format) –
Если это действительно даты, то формат совершенно не имеет значения. Excel хранит дату/время как дни и доли дня с 1 января 1900 года. '= MIN (D: D)' вернет самую раннюю дату/время в столбце D; '= MAX (E: E)' вернет последнюю дату/время в столбце E –
Чтобы использовать эту функцию в массиве, просто замените диапазон на одномерный массив. –