Доброе время суток, форумчане. Помогите создать макрос который будет автоматически сортировать данные по 4 столбцам (сначала В, затем С, затем Е, D) Создал макрос, но там больше, чем по 3 столбцам не получается отсортировать.
Доброе время суток, форумчане. Помогите создать макрос который будет автоматически сортировать данные по 4 столбцам (сначала В, затем С, затем Е, D) Создал макрос, но там больше, чем по 3 столбцам не получается отсортировать.Timberwolf
Вы использовали старый метод, который, действительно, позволяет отсортировать не более трёх столбцов за раз. можно выкрутиться и с ним - отсортировывая частями "справа налево" - т.е. первый раз по столбцам C, E, D и второй - по столбцу B
но, начиная с версии 2007, появился другой метод. и макрорекодер пишет именно его. для Вашего примера это выглядит так: [vba]
Код
Sub Макрос1() ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("B2:B100") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("C2:C100") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("E2:E100") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("D2:D100") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист1").Sort .SetRange Range("B1:Z100") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
[/vba]
естественно, такой код в версиях 2003 и старше выполняться не будет. так что выбирайте сами.
пс. а это правильно - что у Вас столбец A не включен в диапазон?
Вы использовали старый метод, который, действительно, позволяет отсортировать не более трёх столбцов за раз. можно выкрутиться и с ним - отсортировывая частями "справа налево" - т.е. первый раз по столбцам C, E, D и второй - по столбцу B
но, начиная с версии 2007, появился другой метод. и макрорекодер пишет именно его. для Вашего примера это выглядит так: [vba]
Код
Sub Макрос1() ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("B2:B100") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("C2:C100") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("E2:E100") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("D2:D100") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("Лист1").Sort .SetRange Range("B1:Z100") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub
[/vba]
естественно, такой код в версиях 2003 и старше выполняться не будет. так что выбирайте сами.
пс. а это правильно - что у Вас столбец A не включен в диапазон?ikki
помощь по Excel и VBA ikki@fxmail.ru, icq 592842413, skype alex.ikki