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

Вход

Регистрация

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

 

= Мир MS Excel/Сортировка динамического диапазона по убыванию. - Мир MS Excel

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

Excel 2010
Доброго времени суток.
Прошу помочь с сортировкой диапазона.
Записал макросом сортировку диапазона:

[vba]
Код
ActiveWorkbook.Worksheets("Список загрузки").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Список загрузки").Sort.SortFields.Add Key:=Range( _
"W2:W95"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Список загрузки").Sort
.SetRange Range("V2:W95")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
[/vba]

Всё работает, но диапазон постоянно меняется. Да к тому же сортировка по убыванию и если взять диапазон больше данных, то в верхние строки попадают пустые ячейки.
Проблема в следующем:
При попытке в макросе заменить адрес "V2:W95" на строковую переменную или полностью "Range("V2:W95")" на переменную типа Range выдает ошибку:

"Недопустимая ссылка для сортировки. Убедитесь, что она
указывает на данные которые нужно отсортировать и что
в первом поле "Сортировать по" указано допустимое значение."

При всем при этом выделяется именно необходимый мне диапазон, а дебагер выделяет строку ".Apply"

Заранее благодарен за помощь!
[moder]Оформляйте коды тегами (кнопка #). Исправила на первый раз[/moder]


Сообщение отредактировал Pelena - Суббота, 21.11.2015, 10:50
 
Ответить
СообщениеДоброго времени суток.
Прошу помочь с сортировкой диапазона.
Записал макросом сортировку диапазона:

[vba]
Код
ActiveWorkbook.Worksheets("Список загрузки").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Список загрузки").Sort.SortFields.Add Key:=Range( _
"W2:W95"), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
xlSortNormal
With ActiveWorkbook.Worksheets("Список загрузки").Sort
.SetRange Range("V2:W95")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
[/vba]

Всё работает, но диапазон постоянно меняется. Да к тому же сортировка по убыванию и если взять диапазон больше данных, то в верхние строки попадают пустые ячейки.
Проблема в следующем:
При попытке в макросе заменить адрес "V2:W95" на строковую переменную или полностью "Range("V2:W95")" на переменную типа Range выдает ошибку:

"Недопустимая ссылка для сортировки. Убедитесь, что она
указывает на данные которые нужно отсортировать и что
в первом поле "Сортировать по" указано допустимое значение."

При всем при этом выделяется именно необходимый мне диапазон, а дебагер выделяет строку ".Apply"

Заранее благодарен за помощь!
[moder]Оформляйте коды тегами (кнопка #). Исправила на первый раз[/moder]

Автор - Darck
Дата добавления - 21.11.2015 в 10:42
Kuzmich Дата: Суббота, 21.11.2015, 11:48 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 711
Репутация: 156 ±
Замечаний: 0% ±

Excel 2003
Цитата
заменить адрес "V2:W95" на строковую переменную

Используйте "V2:W" & iLastRow
iLastRow-последняя строка в столбце V или W
 
Ответить
Сообщение
Цитата
заменить адрес "V2:W95" на строковую переменную

Используйте "V2:W" & iLastRow
iLastRow-последняя строка в столбце V или W

Автор - Kuzmich
Дата добавления - 21.11.2015 в 11:48
RAN Дата: Суббота, 21.11.2015, 12:00 | Сообщение № 3
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Sub мяу()
Dim r as Range
    With ActiveWorkbook.Worksheets("Список загрузки")
        Set r = .Range("V2:W95")
        With .Sort
            .SortFields.Clear
            .SortFields.Add Key:=r(2) _
                          , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
                            xlSortNormal
             .SetRange r
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!

Сообщение отредактировал RAN - Суббота, 21.11.2015, 12:02
 
Ответить
Сообщение[vba]
Код
Sub мяу()
Dim r as Range
    With ActiveWorkbook.Worksheets("Список загрузки")
        Set r = .Range("V2:W95")
        With .Sort
            .SortFields.Clear
            .SortFields.Add Key:=r(2) _
                          , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _
                            xlSortNormal
             .SetRange r
            .Header = xlGuess
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
End Sub
[/vba]

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

Excel 2010
RAN, спасибо! Работает!
А можешь пояснить что сделал?
Насколько я понял в "Key" устанавливаем диапазон для сортировки. А тут получается передаем индекс строки: r(2).
В общем я нифига не понял :) ... что в принципе не удивительно для моих скромных познаний...
 
Ответить
СообщениеRAN, спасибо! Работает!
А можешь пояснить что сделал?
Насколько я понял в "Key" устанавливаем диапазон для сортировки. А тут получается передаем индекс строки: r(2).
В общем я нифига не понял :) ... что в принципе не удивительно для моих скромных познаний...

Автор - Darck
Дата добавления - 21.11.2015 в 12:32
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Сортировка динамического диапазона по убыванию. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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