Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2022, 16:45   #1
andreysuperman42
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 43
Печаль Неправильная сортировка по дате (как перевести дату в числовой формат)

Добрый день всем.
После выгрузки из словаря на лист EXCEL даты имеют текстовый формат. Сортировка поэтому не правильная. Попытки вернуть числовой формат даты с помощью функций CDate и DateValue не приводят к нужному результату.
Прошу помочь.

Код:
Private Sub CommandButton2_Click()

    Application.ScreenUpdating = False    ' Отключаем обновление экрана...
    Range("G2:H1000").ClearContents    '=> Очищаем содержимое на листе
    varArray = Range("A1").CurrentRegion.Value ' Создаем массив varArray
    
    With dictObject
        .RemoveAll
        For lngRow = 2 To UBound(varArray, 1)
            item = varArray(lngRow, 1) & "|" & varArray(lngRow, 2) & "|"
            .Add .Count, item
        Next lngRow

        Items = .Items ' Передаем переменной Items все созданные элементы
        ReDim varArray2(0 To 1, 0 To UBound(Items)) ' Объявляем массив varArray2
        
        For lngRow = 0 To UBound(Items)
            item = Items(lngRow)
            varArray = Split(item, "|")
            varArray2(0, lngRow) = DateValue(varArray(0)) ' пробовал и CDate
            varArray2(1, lngRow) = varArray(1)
        Next lngRow
        
        Range("G2").Resize(.Count, 2) = Application.Transpose(varArray2)
        
    End With
    Range("G1:H1000").Sort Key1:=Range("G2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal    ' Сортировка по дате
End Sub
Вложения
Тип файла: xls Тест1.xls (162.0 Кб, 5 просмотров)

Последний раз редактировалось andreysuperman42; 23.01.2022 в 19:18.
andreysuperman42 вне форума Ответить с цитированием
Старый 24.01.2022, 09:32   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

вот мутка
Код:
 For lngRow = 0 To UBound(Items)
..........................
 Next lngRow


Range("J1:O1").EntireColumn.Clear
        Range("G2").Resize(.Count, 2) = Application.Transpose(varArray2)
        Range("G1").EntireColumn.TextToColumns Destination:=Range("J1"), _
        DataType:=xlDelimited, FieldInfo:=Array(1, xlDMYFormat)
        
        Range("J2").Resize(.Count, 2).NumberFormat = "m/d/yyyy"
        Range("G2").Resize(.Count, 2).Value = Range("J2").Resize(.Count, 2).Value
        Range("J1:O1").EntireColumn.Clear
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 24.01.2022, 14:19   #3
andreysuperman42
Пользователь
 
Регистрация: 31.03.2013
Сообщений: 43
По умолчанию

Спасибо, Александр.
Вот так сработало....
Код:
Private Sub CommandButton2_Click()

    Application.ScreenUpdating = False    ' Отключаем обновление экрана...
    Range("G2:H1000").ClearContents    '=> Очищаем содержимое на листе
    varArray = Range("A1").CurrentRegion.Value ' Создаем массив varArray
    
    With dictObject
        .RemoveAll
        For lngRow = 2 To UBound(varArray, 1)
            item = varArray(lngRow, 1) & "|" & varArray(lngRow, 2) & "|"
            .Add .Count, item
        Next lngRow

        Items = .Items ' Передаем переменной Items все созданные элементы
        ReDim varArray2(0 To 1, 0 To UBound(Items)) ' Объявляем массив varArray2
        
        For lngRow = 0 To UBound(Items)
            item = Items(lngRow)
            varArray = Split(item, "|")
            varArray2(0, lngRow) = varArray(0)
            varArray2(1, lngRow) = varArray(1)
        Next lngRow
        
        Range("G2").Resize(.Count, 2) = Application.Transpose(varArray2)
        Range("G1").EntireColumn.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, FieldInfo:=Array(1, xlDMYFormat)
    End With
    
    Range("G1:H1000").Sort Key1:=Range("G2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal    ' Сортировка по дате
End Sub
andreysuperman42 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Формат время в числовой формат Sasha2022 Microsoft Office Excel 6 11.01.2022 22:15
Преобразование строки в дату и сортировка выборки по полученной дате new player SQL, базы данных 5 12.02.2015 10:33
Перевести значения в числовой формат книги Excel kaury Microsoft Office Excel 10 14.04.2014 14:38
Как преобразовать формат времени в числовой формат solnce60 Microsoft Office Excel 1 28.04.2013 11:16
как создать в макросе числовой формат ячейки? Dima007 Microsoft Office Excel 2 30.05.2008 14:08