'Сортировка каждого столбца по возрастанию - это по сути несколько сортировок одномерного массива.
Dim mas(3, 6) As Integer
Private Sub Command1_Click()
Label1 = ""
Label2 = ""
'заполнение массива случайными числами
For i = 0 To 2
For j = 0 To 5
mas(i, j) = 20 * Rnd(1)
Label1 = Label1 & " " & mas(i, j)
Next
Label1 = Label1 & " "
Next
'сортировка внутри каждого столбца
For i = 0 To 2
'Max = 0
For j = 1 To 5
k = j
Do While k > 0
If mas(i, k) < mas(i, k - 1) Then
t = mas(i, k)
mas(i, k) = mas(i, k - 1)
mas(i, k - 1) = t
k = k - 1
Else
Exit Do
End If
Loop
Next
Next
'Вывод
For i = 0 To 2
For j = 0 To 5
Label2 = Label2 & " " & mas(i, j)
Next
Label2 = Label2 & " "
Next
End Sub
Или и сами столбцы тоже нужно сортировать? Тогда по какому признаку.
извините, забыла уточнить, что необходимо отсортировать значения (в столбце) типа string в соответствии с заранее заданным списком.
есть массив с данными - как обычная табличка
8 столбцов.
каждой строчке соответствует отдельный объект с восьмью параметрами.
нужно упорядочить по столбцу "код" (string)
а если код повторяется несколько раз, то среди этих строк (с одинаковым кодом) упорядочить ещё по одному параметру "содержание" (тоже string)
'А почему бы так сразу не написать?
Dim mas(10, 8) As String
Private Sub Command1_Click()
Label1 = ""
Label2 = ""
'перенос слов в label чтоб корректно отображалась инфа
Label1.WordWrap = True
Label1.WordWrap = True
'заполнение массива случайными именами
For i = 0 To 9
For j = 0 To 7
mas(i, j) = "name" & Int(20 * Rnd(1))
Label1 = Label1 & " " & mas(i, j)
Next
Label1 = Label1 & vbCrLf
Next
'сортировка по столбцу 0
For i = 1 To 9
k = i
Do While k > 0
If mas(k, 0) < mas(k - 1, 0) Then
For j = 0 To 7
t = mas(k, j)
mas(k, j) = mas(k - 1, j)
mas(k - 1, j) = t
Next
k = k - 1
Else
Exit Do
End If
Loop
Next
'сортировка по столбцу 1 при условии равенства значений в столбце 0
For i = 1 To 10
k = i
Do While k > 0
If mas(k, 0) = mas(k - 1, 0) Then
If mas(k, 1) < mas(k - 1, 1) Then
For j = 0 To 7
t = mas(k, j)
mas(k, j) = mas(k - 1, j)
mas(k - 1, j) = t
Next
k = k - 1
Else
Exit Do
End If
k = k - 1
Else
Exit Do
End If
Loop
Next
'Вывод
For i = 0 To 9
For j = 0 To 7
Label2 = Label2 & " " & mas(i, j)
Next
Label2 = Label2 & vbCrLf
Next
End Sub