Страницы: 1
RSS
Bubble Sort, Изучаю VBA Затык с Bubble Sort
 
Всем привет.
В строке рандомные значения. Нужно отсортировать. Изучаю Bubble Sort.
Код
Sub Урок24_DZ()

Dim Mass() As Long
Dim LB As Long
Dim UB As Long

LB = 20
UB = ThisWorkbook.Worksheets("Лист1").Cells(14, Columns.Count).End(xlToLeft).Column
ReDim Mass(LB To UB) As Long

Call Module5.BBS_DZ(Mass)

End Sub

'----------------------------------------------------------

Sub BBS_DZ(list() As Long)

Dim first As Long
Dim lust As Long
Dim i As Long
Dim j As Long
Dim temp As String

first = LBound(list)
lust = UBound(list)

    For i = first To lust - 1
        For j = i + 1 To lust
            If Cells(14, i) > Cells(14, j) Then
                temp = Cells(14, j)
                Cells(14, j) = Cells(14, i)
                Cells(14, i) = temp
            End If
        Next j
    Next i
    
End Sub
Все работает.

Но тут мне захотелось, чтобы не эта строка сортировалась, а сортировались значения и выводились строкой ниже.
Тот же массив. Проверяю заполнен значениями. Но почему то перебор нулей и строка заполняется нулями :(((
Код
Sub Урок24_D_Z()

Dim Mass() As Long
Dim LB As Long
Dim UB As Long

LB = 20
UB = ThisWorkbook.Worksheets("Лист1").Cells(14, Columns.Count).End(xlToLeft).Column
ReDim Mass(LB To UB) As Long

'Dim i As Long
'For i = LBound(Mass) To UBound(Mass)
' Debug.Print ThisWorkbook.Worksheets("Лист1").Cells(14, i)
'Next i

Call Module5.BBS_D_Z(Mass)

'----------------------------------------------------------------------

End Sub
Sub BBS_D_Z(list() As Long)

Dim i As Long
Dim j As Long
Dim temp As String


'For i = LBound(list) To UBound(list)
' Debug.Print ThisWorkbook.Worksheets("Лист1").Cells(14, i)
'Next i


   For i = LBound(list) To UBound(list) - 1
        For j = i + 1 To UBound(list)
            If list(i) > list(j) Then
                temp = list(j)
                list(j) = list(i)
                list(i) = temp
            End If
        Next j
    Next i
     

For i = LBound(list) To UBound(list)
ThisWorkbook.Worksheets("Лист1").Cells(15, i).Value = list(i)
Next i


End Sub
Подскажите где я туплю пож.
 
AlterEgo В 1 примере вы сортируете значения ячеек. Во втором для массива Mass вы только определили размерность, но не заполнили его. Т.к тип данных массива Long соответственно там все нули.
 
Евгений Смирнов, Но ведь я вот проверяю через   msgbox  мне выводит значение  .... а оказывается массив пустой как так?

ладно подскажите как в моем случае наполнить массив значениями из строки. спс
Изменено: AlterEgo - 20.01.2024 18:42:51
 
Смотрите файл
 
Евгений Смирнов,  

Mass(i) = ThisWorkbook.Worksheets("Лист1").Cells(14, i)    и все?????   блин  .....  Евгений, жму руку.  Благодарю.  
 
Цитата
AlterEgo написал:
я вот проверяю через   msgbox  мне выводит значение
Если Вы имеете ввиду это
Код
'For i = LBound(Mass) To UBound(Mass)
' Debug.Print ThisWorkbook.Worksheets("Лист1").Cells(14, i)
'Next i

то тут Вы в цикле перебираете ячейки, а не элементы массива. Ну а в ячейках значения есть
Согласие есть продукт при полном непротивлении сторон
 
Sanja,  Благодарю, за подсказку ... вот так вот и приходится учиться на своих ошибках :)
Страницы: 1
Наверх