Страницы: 1
RSS
Преобразование для выборки, Нужно отсортировать
 
Есть столбец с данными, как его можно отсортировать?
 
Вот файл с примером
 
Перевести строку в соседний столбец в реальную дату, сортировать всё по нему.
 
А как енто сделать? там записи разного вида гдето года, где месяца, а где только часы
 
На это нужно время... Вот такой каламбур :)
Вообще задача интересная, не делал такого. Может кто уже знает алгоритм?
 
Примерно так
Код
Function Roverwolk(txt)
Dim s$(), i, d$
s = Split(Application.Trim(txt))
ReDim a(0 To 5) As Long 'ymdhns
For i = 1 To UBound(s) Step 2
  d = s(i - 1)
  Select Case LCase$(Replace$(s(i), ".", ""))
  Case "г": a(0) = d
  Case "мес": a(1) = d
  Case "д": a(2) = d
  Case "ч": a(3) = d
  Case "мин": a(4) = d
  Case "с": a(5) = d
  Case Else: Roverwolk = CVErr(xlErrValue): Exit Function
  End Select
Next
Roverwolk = DateSerial(a(0), a(1), a(2)) + TimeSerial(a(3), a(4), a(5))
End Function
 
Примерно так тоже начал делать, только была мысль собирать строку (не дату!) вида "текстyyyymmddhhmm", а секунд там нет :)
Но смотрю с DateSerial(a(0), a(1), a(2)) + TimeSerial(a(3), a(4), a(5)) делать проще.
Интересно, почему в варианте Алексея отсчёт начинается на 30.11.1999?
Изменено: Hugo - 25.03.2015 11:57:14
 
просто Long для сортировки достаточно же:
Код
Function SortTime(Statuz As String) As Long
Dim a, i&, x&
SortTime = 0: x = 0
If Len(Statuz) > 0 Then
    a = Split(Statuz, " ")
    For i = 1 To UBound(a) Step 2
    Select Case a(i)
        Case "г.": x = 8
        Case "мес.": x = 6
        Case "д.": x = 4
        Case "ч.": x = 2
        Case "мин.": x = 0
    End Select
    SortTime = SortTime + a(i - 1) * 10 ^ x
    Next i
End If
End Function
F1 творит чудеса
 
вынес себе мозг вобчем формулами, книга после обработки данной формулой не влазит но поверьте вроде все сортируется в B2 и вниз
Код
=ПСТР(A2;1;ПОИСК(ВЫБОР(МАКС(ЕЧИСЛО(ПОИСК({" мин.";" ч.";" д.";" мес.";" г."};A2;1))*({1;2;3;4;5}));" мин.";" ч.";" д.";" мес.";" г.");A2))*ВЫБОР(МАКС(ЕЧИСЛО(ПОИСК({" мин.";" ч.";" д.";" мес.";" г."};A2;1))*({1;2;3;4;5}));"1";"60";"1440";"43200";"518400")+ЕСЛИОШИБКА(ЕСЛИОШИБКА(--ПСТР(A2;ПОИСК(" ч.";A2)+4;ПОИСК(" мин.";A2)-ПОИСК(" ч.";A2)-4);--ПСТР(A2;ПОИСК(" д.";A2)+4;ПОИСК(" мин.";A2)-ПОИСК(" д.";A2)-4));0)+ЕСЛИОШИБКА(--ПСТР(A2;ПОИСК(" д.";A2)+4;ПОИСК(" ч.";A2)-ПОИСК(" д.";A2)-4)*60;0)+ЕСЛИОШИБКА(ЕСЛИОШИБКА(--ПСТР(A2;ПОИСК(" мес.";A2)+6;ПОИСК(" д.";A2)-ПОИСК(" мес.";A2)-6)*24*60;--ПСТР(A2;ПОИСК(" г.";A2)+4;ПОИСК(" д.";A2)-ПОИСК(" г.";A2)-4)*24*60);0)+ЕСЛИОШИБКА(--ПСТР(A2;ПОИСК(" г.";A2)+4;ПОИСК(" мес.";A2)-ПОИСК(" г.";A2)-4)*30*24*60;0)
Лень двигатель прогресса, доказано!!!
 
Сергей, я тоже попробовал формулами, но на полпути плюнул и навал макрос )))
F1 творит чудеса
Страницы: 1
Наверх