Страницы: 1
RSS
Сортировка в выделяемом диапазоне по определенной колонке
 
Добрый день.
В прилагаемом файле кусочек сортируемых данных и текст моего макроса.
Задача: данные в таблице отсортировать по колонке С по убыванию.
Вопрос: что поменять в макросе чтобы макрос сортировал по третьей колонке, а не по первой? Он сортирует названия городов.
При автоматической записи не получилось избавиться от уже выделенного диапазона.
 
Код
Sub iSort_3()
Dim iLastRow As Long
    iLastRow = Cells(Rows.Count, "C").End(xlUp).Row
    Range("A1:C" & iLastRow).Sort Range("C1"), xlDescending, Header:=xlYes
End Sub
 
Не могу понять ((
На трех столбцах работает. А когда пытаюсь применить на другом диапазоне, с другим количеством колонок получается фигня - сортирует все вместе и за пределами выделенного диапазона.

В Пример2 нужно сортировать по желтой колонке 3 разных диапазона (выделила их рамкой и цветом).
Что неправильно?
Код
Sub iSort_3()
Dim iLastRow As Long
    iLastRow = Cells(Rows.Count, "F").End(xlUp).Row
    Range("B1:F" & iLastRow).Sort Range("F1"), xlDescending, Header:=xlYes
End Sub
Изменено: vikttur - 09.09.2021 00:27:01
 
EvaAleks,
Код
 iLastRow = Cells(Rows.Count, "F").End(xlUp).Row

Эта команда ищет последнюю строку в столбце F (=82)
Поэтому и сортирует B1:F82
 
EvaAleks, см. картинку
 
Kuzmich, что исправить чтобы сортировал только выделенный диапазон? И потом при выделении другого диапазона так же не трогал другие области?
Изменено: EvaAleks - 09.09.2021 09:03:58
 
Цитата
EvaAleks написал:
только выделенный диапазон
видимо, как-то так:
Код
Sub iSort_3()
    If Selection.Columns.Count >= 3 Then
        Selection.Sort Selection.Cells(1, 3), xlDescending, Header:=xlYes
    End If
End Sub
Изменено: Дмитрий(The_Prist) Щербаков - 09.09.2021 09:17:37 (добавил проверку на кол-во столбцов)
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, вообще не ясно что он сортирует. Цифры в желтой колонке не по убыванию. И захватываются данные по всем диапазону B:F
 
Цитата
EvaAleks написал:
вообще не ясно что он сортирует
вообще не ясно что Вы выделяете и что в колонках B:F. Вы вроде как просили:
Цитата
EvaAleks написал:
чтобы сортировал только выделенный диапазон
код именно это и делает: сортирует только выделенный диапазон и только по третьему столбцу. Может надо что-то другое и Вы забыли нам об этом сообщить?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
EvaAleks,
сформулируйте задачу, тогда, возможно, вам подскажут как или чем ее решить
(в мире написано миллиарды отличных макросов, но "заточены" они для решения возможно очень похожих, но других задач)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
У меня большая таблица размером A1:CD3219 (эти размеры могут меняться по числу строк), состоящая из небольших диапазонов внутри которых нужна сортировка по убыванию по определенной колонке.

В файле Пример2 часть этой таблицы из трех диапазонов и меньшим числом колонок. Каждый диапазон (в файле я выделила жирной рамкой и тремя разными цветами) я выделяю вручную, т.к. количество строк разное. В Примере я выделяю сначала диапазон B3:F28 и сортирую по колонке F; затем выделяю диапазон B30:F55 и опять сортирую по колонке F; выделяю диапазон B57:F82 и опять сортирую по колонке F.

А макрос сортирует в рамках B1:F82. Это не правильно в моем случае.
 
Цитата
EvaAleks написал:
А макрос сортирует в рамках B1:F82
какой именно? Почему я в Вашем файле выделяю диапазон А1:С17 -запускаю свой макрос и он сортирует мне только диапазон А1:С17? Т.е. именно(и только!) тот, который я выделил до запуска кода.
Цитата
EvaAleks написал:
опять сортирую по колонке F
а колонка F в диапазоне B1:F82 никак не 3-я по счету. Определитесь с критериями и с задачей в целом.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, у меня приложено 2 файла. В первом - Пример.xlsx только один диапазон и 3 колонки. Ниже в посте я выложила другой файл - Пример2.xlsx. В первом случае макрос работает, во втором случае нет. Поэтому и спросила как исправить макрос, чтобы он работал на другом количестве колонок и при выделении диапазонов ниже.
 
Вангую.  :D
Код
Sub Vanga()
        Selection.Sort Selection.Cells(1, Selection.Columns.Count), xlDescending, Header:=xlNo
End Sub
 
Цитата
EvaAleks написал:
В первом случае макрос работает, во втором случае нет.
и опять не верно. Напишите подробнее что делаете и что ожидаете в итоге. Только что проверил на втором файле - выделил диапазон B3:F28, запустил свой код - диапазон отсортировался по столбцу D, как и было в изначальной задаче(т.е. третий столбец выделенного диапазона). Выделил B30:F55 - запустил - тоже отсортировался только выделенный диапазон и только по третьему столбцу выделенного диапазона.
Сортирует по убыванию, т.к. не совсем понятно как именно надо.
Цитата
EvaAleks написал:
он работал на другом количестве колонок
где Вы это написали и где указали, как это должно работать? Выделили Вы диапазон A1:CD3219 - по какой должен сортировать макрос? Вы написали только это:
Цитата
EvaAleks написал:
сортировка по убыванию по определенной колонке
неплохо бы еще и указать, как понять какая это колонка. Как определить ту, по которой сортировать? Действительно ли она всегда последняя, как попробовали угадать в сообщении выше?
чем четче Вы опишите задачу - тем быстрее и правильнее будет полученный ответ.
Цитата
Дмитрий(The_Prist) Щербаков написал:
Вангую
ох, неблагодарное это занятие :) Но похоже на правду. Но тут же важно понимать, нужны ли заголовки, реально ли именно по последнему выделенному столбцу надо сортировать...А нам об этом не сильно-то рассказывают.
Изменено: Дмитрий(The_Prist) Щербаков - 09.09.2021 11:10:04
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Или даже так
Код
Sub Vanga_2()
    Dim x&
    With Selection
        x = InputBox("Укажите № столбца в выделении", , .Columns.Count)
        .Sort .Cells(1, x), xlDescending, Header:=xlNo
    End With
End Sub
 
RAN, заработало!!!! ))) только каждый раз спрашивает по какому столбцу сортировать
 
Sub Vanga() не спрашивает.  :D  
 
RAN, а если понадобится отсортировать через Vanga допустим по 11 колонке, он сработает?
 
Цитата
EvaAleks написал:
а если понадобится отсортировать через Vanga допустим по 11 колонке
А что мешает использовать два макроса: Vanga для просто сортировки и Vanga_2, если надо отсортировать по конкретному столбцу (например по 11-му)?
 
Просто каждый раз указывать номер нужной колонки?
 
EvaAleks,
Да. А как по-другому? Если сортируем всегда по одному столбцу, то программе достаточно указать его один раз, и дальше она сама всё будет делать. А вот если каждый раз столбец, по которому сортируем, разный - как программа должна узнать, какой столбец в конкретный момент её выполнения ей нужно использовать? Только, если ей каждый раз его принудительно указывать.
 
Просто уточняю, правильно лия  поняла ))) Спасибо огромное. Слишком много времени прошло с того момента как я записывала и редактировала макросы. А сейчас уже не соображаю, где косячу.
Страницы: 1
Наверх