В таблице около 2 тыс. строк. 13 столбцов. В втором из них -текстовые значения (наименования товаров). В остальных столбцах числа (стоимость, кол-во и пр.).
Нужно написать макрос, который сортировал бы строки в этой таблице по второму столбцу, т.е. по наименованию. Этот макрос затем используется в другом, большом макросе.
Написал сам сортировку "пузырьком" - работает чрезвычайно медленно (если вообще работает - окончания я ни разу не дождался):
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
sub sortirovka()
Dim i As Long
Dim j As Long
Dim a As long
Dim num As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
num = ActiveSheet.UsedRange.Rows.Count
For i = 2 To num - 1 Step 1
For j = 3 To num Step 1
If Cells(i, 2).Value > Cells(j, 2) Then
For a = 2 To 13 Step 1
temp = Cells(j, a).Value
Cells(j, a).Value = Cells(i, a).Value
Cells(i, a).Value = temp
Next a
End If
Next j
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
end sub
Если же воспользоваться встроенной сортировкой экселя, то сортирует довольно (и обидно) быстро. Вот, что записывает при этом записывальщик кода:
Sub Macros1()
Range("A1:M2186").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Может, это как-то можно в макрос засунуть?
Буду очень благодарен за любую помощьили совет.
Нужно написать макрос, который сортировал бы строки в этой таблице по второму столбцу, т.е. по наименованию. Этот макрос затем используется в другом, большом макросе.
Написал сам сортировку "пузырьком" - работает чрезвычайно медленно (если вообще работает - окончания я ни разу не дождался):
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
sub sortirovka()
Dim i As Long
Dim j As Long
Dim a As long
Dim num As Long
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
num = ActiveSheet.UsedRange.Rows.Count
For i = 2 To num - 1 Step 1
For j = 3 To num Step 1
If Cells(i, 2).Value > Cells(j, 2) Then
For a = 2 To 13 Step 1
temp = Cells(j, a).Value
Cells(j, a).Value = Cells(i, a).Value
Cells(i, a).Value = temp
Next a
End If
Next j
Next i
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
end sub
Если же воспользоваться встроенной сортировкой экселя, то сортирует довольно (и обидно) быстро. Вот, что записывает при этом записывальщик кода:
Sub Macros1()
Range("A1:M2186").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub
Может, это как-то можно в макрос засунуть?
Буду очень благодарен за любую помощьили совет.