Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Сортировка ListBox по дате - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сортировка ListBox по дате (Макросы/Sub)
Сортировка ListBox по дате
keeper Дата: Пятница, 23.01.2015, 10:26 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Добрый день уважаемые форумчане.

Поиск результатов не дал, по этому спрашиваю в отдельной теме.

Каким образом можно отсортировать по убыванию ListBox содержащий список дат?
 
Ответить
СообщениеДобрый день уважаемые форумчане.

Поиск результатов не дал, по этому спрашиваю в отдельной теме.

Каким образом можно отсортировать по убыванию ListBox содержащий список дат?

Автор - keeper
Дата добавления - 23.01.2015 в 10:26
alex77755 Дата: Пятница, 23.01.2015, 10:39 | Сообщение № 2
Группа: Проверенные
Ранг: Обитатель
Сообщений: 362
Репутация: 64 ±
Замечаний: 0% ±

В каком формате даты?
Наверное надо привести к системному формату
23.01.2015 = 42027


Могу помочь в VB6, VBA
Alex77755@mail.ru
 
Ответить
СообщениеВ каком формате даты?
Наверное надо привести к системному формату
23.01.2015 = 42027

Автор - alex77755
Дата добавления - 23.01.2015 в 10:39
keeper Дата: Пятница, 23.01.2015, 10:48 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Даты в формате "ДД.ММ.ГГГГ"
Не подскажите функцию для перевода из этого формата в системный?
 
Ответить
СообщениеДаты в формате "ДД.ММ.ГГГГ"
Не подскажите функцию для перевода из этого формата в системный?

Автор - keeper
Дата добавления - 23.01.2015 в 10:48
keeper Дата: Пятница, 23.01.2015, 15:09 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 9
Репутация: 1 ±
Замечаний: 0% ±

Excel 2010
Не сочтите за нарушение. Нашел на другом форуме отличный алгоритм
Вот ссылка на пост sql.ru

Добавил к себе вот такой слегка видоизмененный кусок кода
[vba]
Код

Type QuickStack
         'тип для QuickSort
         Low As Long
         High As Long
End Type
Sub QuickSortNonRecursive(ByRef SortArray(), Optional Descending As Boolean)
         Dim i As Long, j As Long, lb As Long, ub As Long
         Dim stack() As QuickStack, stackpos As Long, maxstackpos As Long, stposArrMax As Long, ppos As Long, pivot As Variant, swp
              
         lb = LBound(SortArray)
         ub = UBound(SortArray)
         stposArrMax = 16
         ReDim stack(stposArrMax)
              
         stackpos = 1
         maxstackpos = 1
         stack(1).Low = lb
         stack(1).High = ub
         Do
             lb = stack(stackpos).Low
             ub = stack(stackpos).High
             stackpos = stackpos - 1
             Do
                 ppos = (lb + ub) \ 2
                 i = lb: j = ub: pivot = SortArray(ppos)
                 Do
                     While IIf(Descending, SortArray(i) > pivot, SortArray(i) < pivot): i = i + 1: Wend
                     While IIf(Descending, pivot > SortArray(j), pivot < SortArray(j)): j = j - 1: Wend
                     If i > j Then Exit Do
                     swp = SortArray(i): SortArray(i) = SortArray(j): SortArray(j) = swp
                     i = i + 1
                     j = j - 1
                Loop While i <= j

                 If i < ppos Then
                     stackpos = stackpos + 1
                     If stackpos > maxstackpos Then maxstackpos = stackpos
                     If stackpos > stposArrMax Then stposArrMax = stposArrMax * 2: ReDim Preserve stack(stposArrMax)
                     stack(stackpos).Low = i
                     stack(stackpos).High = ub
                     ub = j
                 Else
                     If j > lb Then
                         stackpos = stackpos + 1
                         If stackpos > maxstackpos Then maxstackpos = stackpos
                         If stackpos > stposArrMax Then stposArrMax = stposArrMax * 2: ReDim Preserve stack(stposArrMax)
                         stack(stackpos).Low = lb
                         stack(stackpos).High = j
                     End If
                     lb = i
                 End If
             Loop While lb < ub
         Loop While stackpos
End Sub
[/vba]

Заполняю одномерный массив датами и передаю в процедуру QuickSortNonRecursive()

[vba]
Код

Dim i, z As Integer
Dim ArrName(5) As Variant
' Заполняем массив както-так...
        For z = 1 To 5
            ArrName(z-1) = ....дата
        Next z
'Сортируем массив
Call QuickSortNonRecursive(ArrName)

        i = y
        'Заполняем ListBox в обратной последовательности, не обязательно, можно воспользоваться параметром Descending в процедуре
        Do While i > 0
            ListBox1.AddItem (CStr(ArrName(i)))
            i = i - 1
        Loop

[/vba]


Сообщение отредактировал keeper - Пятница, 23.01.2015, 15:25
 
Ответить
СообщениеНе сочтите за нарушение. Нашел на другом форуме отличный алгоритм
Вот ссылка на пост sql.ru

Добавил к себе вот такой слегка видоизмененный кусок кода
[vba]
Код

Type QuickStack
         'тип для QuickSort
         Low As Long
         High As Long
End Type
Sub QuickSortNonRecursive(ByRef SortArray(), Optional Descending As Boolean)
         Dim i As Long, j As Long, lb As Long, ub As Long
         Dim stack() As QuickStack, stackpos As Long, maxstackpos As Long, stposArrMax As Long, ppos As Long, pivot As Variant, swp
              
         lb = LBound(SortArray)
         ub = UBound(SortArray)
         stposArrMax = 16
         ReDim stack(stposArrMax)
              
         stackpos = 1
         maxstackpos = 1
         stack(1).Low = lb
         stack(1).High = ub
         Do
             lb = stack(stackpos).Low
             ub = stack(stackpos).High
             stackpos = stackpos - 1
             Do
                 ppos = (lb + ub) \ 2
                 i = lb: j = ub: pivot = SortArray(ppos)
                 Do
                     While IIf(Descending, SortArray(i) > pivot, SortArray(i) < pivot): i = i + 1: Wend
                     While IIf(Descending, pivot > SortArray(j), pivot < SortArray(j)): j = j - 1: Wend
                     If i > j Then Exit Do
                     swp = SortArray(i): SortArray(i) = SortArray(j): SortArray(j) = swp
                     i = i + 1
                     j = j - 1
                Loop While i <= j

                 If i < ppos Then
                     stackpos = stackpos + 1
                     If stackpos > maxstackpos Then maxstackpos = stackpos
                     If stackpos > stposArrMax Then stposArrMax = stposArrMax * 2: ReDim Preserve stack(stposArrMax)
                     stack(stackpos).Low = i
                     stack(stackpos).High = ub
                     ub = j
                 Else
                     If j > lb Then
                         stackpos = stackpos + 1
                         If stackpos > maxstackpos Then maxstackpos = stackpos
                         If stackpos > stposArrMax Then stposArrMax = stposArrMax * 2: ReDim Preserve stack(stposArrMax)
                         stack(stackpos).Low = lb
                         stack(stackpos).High = j
                     End If
                     lb = i
                 End If
             Loop While lb < ub
         Loop While stackpos
End Sub
[/vba]

Заполняю одномерный массив датами и передаю в процедуру QuickSortNonRecursive()

[vba]
Код

Dim i, z As Integer
Dim ArrName(5) As Variant
' Заполняем массив както-так...
        For z = 1 To 5
            ArrName(z-1) = ....дата
        Next z
'Сортируем массив
Call QuickSortNonRecursive(ArrName)

        i = y
        'Заполняем ListBox в обратной последовательности, не обязательно, можно воспользоваться параметром Descending в процедуре
        Do While i > 0
            ListBox1.AddItem (CStr(ArrName(i)))
            i = i - 1
        Loop

[/vba]

Автор - keeper
Дата добавления - 23.01.2015 в 15:09
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сортировка ListBox по дате (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!