Страницы: 1
RSS
VBA. Преобразовать строку String в массив с датами
 
Здравствуйте.
Необходимо вывести минимальное и максимальное значение.
Не соображу, что не так?
Помогите, пожалуйста.
Код
Sub subTemp1()
Dim s As String
Dim spl
Dim arr()
Dim i As Integer

s = "12.01.2017@18.01.17@20.02.18"' вот тут в разных форматах, как видно
spl = Split(s, "@")
ReDim arr(UBound(spl))
For i = 0 To UBound(spl)
    arr(i) = Format(spl(i), "DD.MM.YYYY")
Next i

MsgBox WorksheetFunction.Min(arr) & vbTab & WorksheetFunction.Max(arr)
End Sub

Спасибо.
 
Код
arr(i) = CDate(spl(i))

А выводить уже с форматом:
Код
MsgBox Format(WorksheetFunction.Min(arr),"DD.MM.YYYY") & vbTab & Format(WorksheetFunction.Max(arr),"DD.MM.YYYY")
Изменено: Дмитрий Щербаков - 04.03.2018 15:53:48
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, Дмитрий. Не совсем то выводит :)
 
проблема в Min и Max. Они не работают с датами напрямую(в ячейках Excel там все же числа, а не даты, а здесь непосредственно даты). Поэтому Вам, скорее всего, надо будет делать двойное преобразование:
Код
Sub subTemp1()
Dim s As String
Dim spl
Dim arr()
Dim i As Integer
 
s = "12.01.2017@18.01.17@20.02.18"
spl = Split(s, "@")
ReDim arr(UBound(spl))
For i = 0 To UBound(spl)
    arr(i) = CLng(CDate(spl(i)))
Next i
 
MsgBox Format(WorksheetFunction.Min(arr), "DD.MM.YYYY") & vbTab & Format(WorksheetFunction.Max(arr), "DD.MM.YYYY")
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо, заработало :)
 
Код
Sub subTemp1()
Dim s As String
Dim spl, dmax As Date, dmin As Date
Dim i As Integer
dmin = CDate("31.12.9999"): dmax = CDate(0)
s = "12.01.2017@18.01.17@20.02.18" ' âîò òóò â ðàçíûõ ôîðìàòàõ, êàê âèäíî
spl = Split(s, "@")
For i = 0 To UBound(spl)
    spl(i) = CDate(spl(i))
    If spl(i) > dmax Then dmax = spl(i)
    If spl(i) < dmin Then dmin = spl(i)
Next i
 
MsgBox Format(dmin, "DD.MM.YYYY") & vbTab & Format(dmax, "DD.MM.YYYY")
End Sub
 
Diana Tailor, можно "вручную" посчитать. Кстати, если нужны только max & min, то массив не нужен.
Код
Sub subTemp1()
Dim s As String
Dim spl$()
Dim arr(), mn, mx
Dim i As Long
 
s = "12.01.2017@18.01.17@20.02.18" ' вот тут в разных форматах, как видно
spl = Split(s, "@")
ReDim arr(UBound(spl))

For i = 0 To UBound(spl)
    arr(i) = CDate(spl(i)) ', "DD.MM.YYYY")
    If i = 0 Then
      mn = arr(i): mx = mn
    ElseIf arr(i) < mn Then mn = arr(i)
    ElseIf arr(i) > mx Then mx = arr(i)
    End If
Next i
 
MsgBox mn & vbTab & mx
End Sub
 
Большое спасибо за ликбез по Excel :)
Страницы: 1
Наверх