#excel #shell #sorting #vba
#excel #оболочка #сортировка #vba
Вопрос:
Я сам изучаю VB. Я должен написать код для сортировки столбца A: A в методе оболочки. Я застрял на переходе к следующему пробелу (следующий пробел — это просто пробел / 2) после сортировки для первых N / 2 (N — количество ячеек для сортировки).
Sub Shellsort()
Dim gap As Long
Dim i As Long
Dim Obad As Range
Dim N As Long
Dim temp As Long
N = Application.WorksheetFunction.CountA(Sheets(1).Range("A:A"))
gap = N
For i = 1 To gap
If Cells(i, 1).Value < Cells(i gap, 1).Value Then
temp = Cells(i, 1).Value
Cells(i, 1).Value = Cells(i gap, 1).Value
Cells(i gap, 1).Value = temp
End If
Next i
End Sub
Как мне продолжить? Этот код ofc теперь сравнивает только 2 ячейки, но я понятия не имею, как заставить его зависеть от фактического разрыва.
Ответ №1:
Чтобы перейти к следующему пробелу (и первый пробел, вероятно, должен быть N2
, а не N
btw), я бы обернул ваш цикл в
Do While gap > 0
For i = 1 To gap
'code
Next i
gap = gap 2
Loop
Что касается сортировки внутри каждого чередующегося набора, вы, вероятно, захотите извлечь этот набор в виде массива в цикле for и применить (отдельно реализованную) сортировку вставки к этому массиву.