Ссылка на Дата Сортировка массива и Заполнение списка из массива
Публикация c объявление переменной массива в модуле Public Dtarr(1 To 8) As Date
Можно повторить размер массива в макросе, чтобы изменить его размер до размера таблицы.
Ниже приведена таблица дат
Добавлена следующая процедура в модуле для сортировки массива дат .
Sub SortAr(arr() As Date)
Dim Temp As Date
Dim i As Long, j As Long
For j = 2 To UBound(arr)
Temp = arr(j)
For i = j - 1 To 1 Step -1
If (arr(i) >= Temp) Then GoTo 10
' ">" sorts in descending order.
' "<" sorts in ascending order.
arr(i + 1) = arr(i)
Next i
i = 0
10: arr(i + 1) = Temp
Next j
End Sub
Добавлена следующая процедура для пользовательской формы
Private Sub UserForm_Initialize()
Dim Sh As Worksheet
Set Sh = ThisWorkbook.Worksheets("Sheet2")
For i = 1 To 8
Dtarr(i) = Sh.Range("A" & i + 3).Value
Next
SortAr Dtarr
ListBox1.List = Dtarr
End Sub
Итак, вывод - отсортированный список в порядке убывания. Пользователь всегда может видеть время последней записи вверху.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Редактирование ответа в соответствии с вашим комментарием ниже под вашим комментарием *
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Ниже приведены примеры данных в A1: T13.
Ниже приведен код пользовательской формы. Вы можете указать диапазон данных (arrData
) в коде пользовательской формы.
Private Sub UserForm_Initialize()
Set Sh = ThisWorkbook.Worksheets("Sheet1")
Set AllData = Sh.Range("A1").CurrentRegion
x = AllData.Rows.Count - 1: y = AllData.Columns.Count
Set ListData = AllData.Offset(1, 0).Resize(x, y)
ReDim Dtarr(1 To x, 1 To y)
Dtarr = ListData.Value
Sort2DArr Dtarr, 2 'Second column as you need to sort on Column B
With ListBox1
.List = Dtarr
.ColumnCount = y
.ColumnWidths = "25;100;25;25;25;25;25;25;25;25;25;25;25;25;25;25;25;25;25;25"
End With
End Sub
Ниже приведен код Module1 для сортировки Dtarr. Обратите внимание, Public Dtarr()
в коде
Option Base 1
Public Sh As Worksheet
Public AllData As Range
Public ListData As Range
Public x As Long
Public y As Long
Public Dtarr()
Sub Sort2DArr(arr(), srtCol As Long)
Dim temp As Date, temparr, srtColArr, temp2 As String
Dim i As Long, j As Long
ReDim temparr(x)
srtColArr = WorksheetFunction.Index(arr, 0, srtCol)
For i = 1 To x
temparr(i) = Join(Application.Index(arr, i, 0), "~")
Next
temparr = Application.Transpose(temparr)
For j = 2 To x
temp = srtColArr(j, 1)
temp2 = temparr(j, 1)
For i = j - 1 To 1 Step -1
If (srtColArr(i, 1) >= temp) Then GoTo 10
' ">" sorts in descending order.
' "<" sorts in ascending order.
srtColArr(i + 1, 1) = srtColArr(i, 1)
temparr(i + 1, 1) = temparr(i, 1)
Next i
i = 0
10: srtColArr(i + 1, 1) = temp
temparr(i + 1, 1) = temp2
Next j
ReDim Dtarr(1 To x + 1, 1 To y)
For i = 1 To y
Dtarr(1, i) = AllData(1, i).Value
Next
For i = 2 To x + 1
tempRow = Split(temparr(i - 1, 1), "~")
For j = 1 To y
Dtarr(i, j) = tempRow(j - 1)
Next
Next
End Sub
Итак, вывод - отсортированный список в порядке убывания. Пользователь всегда может увидеть время последней записи вверху.