Страницы: 1
RSS
Помогите написать макрос (отсортировать строки)
 
В таблице около 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  
 
Может, это как-то можно в макрос засунуть?  
Буду очень благодарен за любую помощьили совет.
 
{quote}{login=Exceller}{date=06.10.2008 10:24}{thema=Помогите написать макрос (отсортировать строки)}{post}  
Sub Macros1()  
 
Range("A1:M2186").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:= _  
       xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _  
       DataOption1:=xlSortNormal  
 
End Sub  
 
Может, это как-то можно в макрос засунуть?  
Буду очень благодарен за любую помощь или совет.{/post}{/quote}  
Зачем его куда-то засовывать, это и есть макрос сортировки.  
Можно только немного подправить.  
Например, вместо Range("A1:M2186").Sort записать [A1].CurrentRegion.Sort
 
А пузырьком для сортировки только в учебниках пользуются, и еще, когда в нем налито что-то :)
 
{quote}{login=Exceller}{date=06.10.08 22:24}{thema=Помогите написать макрос (отсортировать строки)}{post}Написал сам сортировку "пузырьком" - работает чрезвычайно{/post}{/quote}  
 
Смотрите во вложении пример с сортировкой методом Шелла – одной из самых скоростных сортировок.
Страницы: 1
Читают тему
Наверх