Как отсортировать массив в vba?

Чтобы отсортировать массив в VBA, вам нужно написать код, в котором вы можете сопоставить первый элемент массива со следующим и поменять их местами, если первый элемент должен идти раньше. Для этого вам понадобится цикл FOR (For Next) и функция UCASE .

В этом уроке мы увидим два способа (AZ и ZA) сортировки элементов массива.

Сортировка массива (AZ)

В приведенном ниже коде у вас есть массив из пяти элементов, и эти элементы имеют значения от E до A, и теперь нам нужно отсортировать в порядке AZ.

сортировка-массива-1

Действия по сортировке массива

  1. Во-первых, вам нужно написать вложенный цикл с For Next, используя верхнюю и нижнюю границы массива.
  2. После этого в этом цикле вам нужно использовать оператор VBA IF для сравнения двух элементов.
  3. Отсюда, если первый элемент должен идти раньше следующего элемента, вам нужно поменять их местами, сохранив их значения в переменных.
  4. В конце используйте ключевое слово «Далее», чтобы завершить цикл.
 Option Base 1 Sub vba_sort_array_a_to_z() Dim myArray() As Variant ReDim myArray(5) Dim i As Integer Dim j As Integer Dim Temp As String myArray(1) = "E" myArray(2) = "D" myArray(3) = "C" myArray(4) = "B" myArray(5) = "A" 'sorting array from A to Z For i = LBound(myArray) To UBound(myArray) For j = i + 1 To UBound(myArray) If UCase(myArray(i)) > UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next j Next i Debug.Print myArray(1) Debug.Print myArray(2) Debug.Print myArray(3) Debug.Print myArray(4) Debug.Print myArray(5) End Sub

Обязательно активируйте окно «Немедленно» , чтобы увидеть там результаты.

Сортировка массива (ZA)

Таким же образом можно сортировать по ЗА. В предыдущем методе мы сравнивали первый элемент со следующим элементом последовательности, но в этом коде нужно сделать наоборот. Таким образом, если второй элемент (следующий по порядку) больше первого, код поменяет их местами.

 Option Base 1 Sub vba_sort_array_z_to_a() Dim myArray() As Variant ReDim myArray(5) Dim i As Integer Dim j As Integer Dim Temp As String myArray(1) = "A" myArray(2) = "B" myArray(3) = "C" myArray(4) = "D" myArray(5) = "E" 'sorting array from A to Z For i = LBound(myArray) To UBound(myArray) For j = i + 1 To UBound(myArray) If UCase(myArray(i)) < UCase(myArray(j)) Then Temp = myArray(j) myArray(j) = myArray(i) myArray(i) = Temp End If Next j Next i Debug.Print myArray(1) Debug.Print myArray(2) Debug.Print myArray(3) Debug.Print myArray(4) Debug.Print myArray(5) End Sub