Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос для автосортировки - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для автосортировки (Макросы/Sub)
Макрос для автосортировки
Timberwolf Дата: Пятница, 26.12.2014, 23:04 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Доброе время суток, форумчане.
Помогите создать макрос который будет автоматически сортировать данные по 4 столбцам (сначала В, затем С, затем Е, D)
Создал макрос, но там больше, чем по 3 столбцам не получается отсортировать.
К сообщению приложен файл: 9710140.xlsm (14.0 Kb)
 
Ответить
СообщениеДоброе время суток, форумчане.
Помогите создать макрос который будет автоматически сортировать данные по 4 столбцам (сначала В, затем С, затем Е, D)
Создал макрос, но там больше, чем по 3 столбцам не получается отсортировать.

Автор - Timberwolf
Дата добавления - 26.12.2014 в 23:04
ikki Дата: Суббота, 27.12.2014, 01:21 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1906
Репутация: 504 ±
Замечаний: 0% ±

Excel 2003, 2010
Вы использовали старый метод, который, действительно, позволяет отсортировать не более трёх столбцов за раз.
можно выкрутиться и с ним - отсортировывая частями "справа налево" - т.е. первый раз по столбцам 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 не включен в диапазон?


помощь по Excel и VBA
ikki@fxmail.ru, icq 592842413, skype alex.ikki
 
Ответить
СообщениеВы использовали старый метод, который, действительно, позволяет отсортировать не более трёх столбцов за раз.
можно выкрутиться и с ним - отсортировывая частями "справа налево" - т.е. первый раз по столбцам 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
Дата добавления - 27.12.2014 в 01:21
Timberwolf Дата: Суббота, 27.12.2014, 01:28 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
Да, хочу сделать словарь, так что нумерация должна оставться одной и той же
 
Ответить
СообщениеДа, хочу сделать словарь, так что нумерация должна оставться одной и той же

Автор - Timberwolf
Дата добавления - 27.12.2014 в 01:28
Timberwolf Дата: Суббота, 27.12.2014, 01:32 | Сообщение № 4
Группа: Пользователи
Ранг: Новичок
Сообщений: 10
Репутация: 0 ±
Замечаний: 0% ±

Excel 2010
я прошу прощения, а можете файл с данным макросом приложить?
Спасибо.
 
Ответить
Сообщениея прошу прощения, а можете файл с данным макросом приложить?
Спасибо.

Автор - Timberwolf
Дата добавления - 27.12.2014 в 01:32
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Макрос для автосортировки (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!