VBA Excel
242 subscribers
88 photos
23 links
VBA Excel для начинающих. Справка по VBA Excel. Visual Basic for Applications. Справочник. Самоучитель.
Download Telegram
Функции для сортировки массива

🛠 Функция для сортировки массива по возрастанию с числовым сравнением числовых элементов массива
Function SortArray(myArray As Variant) As Variant
Dim l As Long, u As Long, i1 As Long, i2 As Long, im As Long, tmp As Variant
'Определение наименьшего индекса массива
l = LBound(myArray)
'Определение наибольшего индекса массива
u = UBound(myArray)
    For i1 = l To u
        im = i1
        For i2 = i1 To u
            'Поиск наименьшего элемента массива, начиная с элемента myArray(i1)
            If myArray(i2) < myArray(im) Then im = i2
        Next
        'Если наименьший элемент не является текущим (im <> i1),
        'тогда наименьший элемент и текущий меняются местами
        If im <> i1 Then
            tmp = myArray(i1)
            myArray(i1) = myArray(im)
            myArray(im) = tmp
        End If
    Next
SortArray = myArray
End Function

Внешний цикл сравнивает по очереди каждый элемент массива с наименьшем элементом, найденным вложенным циклом среди оставшихся элементов (с бóльшими индексами), и, если наименьший элемент myArray(im) не является текущим элементом myArray(i1), они меняются местами.

🛠 Функция для сортировки массива с выбором вида сортировки
Function SortArrayNew(myArray As Variant, mySort As Long) As Variant
Dim l As Long, u As Long, i1 As Long, i2 As Long, im As Long, tmp As Variant
l = LBound(myArray)
u = UBound(myArray)
    For i1 = l To u
        im = i1
            For i2 = i1 To u
                Select Case mySort
                    Case Is = 0
                        If myArray(i2) < myArray(im) Then im = i2
                    Case Is = 1
                        If CStr(myArray(i2)) < CStr(myArray(im)) Then im = i2
                    Case Is = 2
                        If myArray(i2) > myArray(im) Then im = i2
                    Case Is = 3
                        If CStr(myArray(i2)) > CStr(myArray(im)) Then im = i2
                End Select
            Next
        If im <> i1 Then
            tmp = myArray(i1)
            myArray(i1) = myArray(im)
            myArray(im) = tmp
        End If
    Next
SortArrayNew = myArray
End Function

Дополнительный параметр mySort позволяет выбрать сортировку по возрастанию или убыванию и с числовым или текстовым сравнением числовых элементов массива. Значения, которые может принимать параметр mySort в таблице ниже.

#Function #Функция #SortArray #СортировкаМассива