Добрый день, уважаемые коллеги. Помогите пожалуйста понять почему не работает сортировка массива с циклом DO WHILE [vba]
Код
Option Explicit Sub arrays()
Dim Ar1() As Long Dim Elem As Integer Dim i As Integer, j As Integer Dim R
' Заполняю массив рандомными числами и записываю их в столбец 1
Elem = InputBox("Введите размер массива ") ReDim Ar1(1 To Elem, 0) For i = 1 To Elem Ar1(i, 0) = CLng(Rnd * 100000) Next i Range(Cells(1, 1), Cells(Elem, 1)) = Ar1()
' Сортирую массив перебором и записываю отсортированный массив в столбец 3
For i = 1 To Elem - 1 j = i Do While Ar1(j + 1, 0) < Ar1(j, 0) & j > 0 R = Ar1(j, 0) Ar1(j, 0) = Ar1(j + 1, 0) Ar1(j + 1, 0) = R j = j - 1 Loop Next i
Range(Cells(1, 3), Cells(Elem, 3)) = Ar1()
End Sub
[/vba]
В Столбце 1 отображается исходный массив, А в Столбце 3 должен отображаться отсортированный по возрастанию массив, но там отображается тот же самый не отсортированный массив...
Заранее благодарен за ответ...
Добрый день, уважаемые коллеги. Помогите пожалуйста понять почему не работает сортировка массива с циклом DO WHILE [vba]
Код
Option Explicit Sub arrays()
Dim Ar1() As Long Dim Elem As Integer Dim i As Integer, j As Integer Dim R
' Заполняю массив рандомными числами и записываю их в столбец 1
Elem = InputBox("Введите размер массива ") ReDim Ar1(1 To Elem, 0) For i = 1 To Elem Ar1(i, 0) = CLng(Rnd * 100000) Next i Range(Cells(1, 1), Cells(Elem, 1)) = Ar1()
' Сортирую массив перебором и записываю отсортированный массив в столбец 3
For i = 1 To Elem - 1 j = i Do While Ar1(j + 1, 0) < Ar1(j, 0) & j > 0 R = Ar1(j, 0) Ar1(j, 0) = Ar1(j + 1, 0) Ar1(j + 1, 0) = R j = j - 1 Loop Next i
Range(Cells(1, 3), Cells(Elem, 3)) = Ar1()
End Sub
[/vba]
В Столбце 1 отображается исходный массив, А в Столбце 3 должен отображаться отсортированный по возрастанию массив, но там отображается тот же самый не отсортированный массив...
Когда j=0, то Вы одновременно и проверяете кусок j>0, и сравниваете Ar1(j + 1, 0) с Ar1(j, 0). А сравнить-то не получится - у Вас же j=0, а массив начинается с 1. Вот и ошибка - нет у Вас Ar1(0, 0) Погуглите "Сортировка массива VBA" есть куча методов
Когда j=0, то Вы одновременно и проверяете кусок j>0, и сравниваете Ar1(j + 1, 0) с Ar1(j, 0). А сравнить-то не получится - у Вас же j=0, а массив начинается с 1. Вот и ошибка - нет у Вас Ar1(0, 0) Погуглите "Сортировка массива VBA" есть куча методов_Boroda_
Когда j=0, то Вы одновременно и проверяете кусок j>0, и сравниваете Ar1(j + 1, 0) с Ar1(j, 0). А сравнить-то не получится - у Вас же j=0, а массив начинается с 1.
[vba]
Код
For i = 1 To Elem - 1 j = i Do While Ar1(j + 1, 0) < Ar1(j, 0) And j > 0
[/vba]
Где же j = 0 то? В коде цикла сверху j = i , а i начинается с 1...
Я знаю, что в сети куча метородов по сортировке на ВБА, но я только что начал его изучать и поэтому пытаюсь писать самостоятельно а не только разбирать примеры.
Когда j=0, то Вы одновременно и проверяете кусок j>0, и сравниваете Ar1(j + 1, 0) с Ar1(j, 0). А сравнить-то не получится - у Вас же j=0, а массив начинается с 1.
[vba]
Код
For i = 1 To Elem - 1 j = i Do While Ar1(j + 1, 0) < Ar1(j, 0) And j > 0
[/vba]
Где же j = 0 то? В коде цикла сверху j = i , а i начинается с 1...
Я знаю, что в сети куча метородов по сортировке на ВБА, но я только что начал его изучать и поэтому пытаюсь писать самостоятельно а не только разбирать примеры.t330