Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 3 След.
RSS
сортировка по клику. эксел 2003
 
Здравствуйте друзья
Пожалуйста помогите мне разобраться с этим
Как можно сделать сортировку по клику

например имеется таблица, нужно сделать по всем его колонкам сортировку по клику
Никак не могу решит это
 
Фильтр не подойдет? Кликов правда больше - 2 и более. Параметры сортировки какие?
 
спасибо за ответ.
но с филтром неудобно, если десятки страниц и в каждом десятки сортировок.
легче было бы с кликом
где то прочел что для этого нужно что то в исходный тест поставит. но в этом не очен разбираюсь

сортировку сделат нужно было например в этом файле -
 
я хочу чтоб при нахатие на А1 вся страница сортировалас по колонке А
при нажатии на Б1 по этой колонке и так далее
 
Так?
 
спасибо вам за то что уделили время на этот файл

здесь все хорошо но не все так как я хотел

при сортировке одной колонки другин колонки остаются на своих местах, зотя ячейки одной строки связаны с друг другом

напишу вам один пример чтоб вы поняли что я хочу

представте что в колонке А имена ученков
в Б их оценки по математике
в С по географии

в файле сделанной вами при сортировке С цифры одного ученика идут к другому
то ест сортирует только один колонку а не все

думаю что вым и это будет не трудно
и заранее благодарю
 
вариант Range(Target.Offset(1, 0), Cells(LastRow, 49)) заменить на Range("A2:AW" & LastRow)
 
Найдите в коде строку:
Код
Range(Target.Offset(1, 0), Cells(LastRow, 49))

и перепишите её так:
Код
Range(Cells(2, 1), Cells(LastRow, 49))
 
а это можете на том файле сделать?
извините,я в кодах не очень то
 
надо то всего найти и заменить - куда проще. (
 
все, это то что нужно было, ОТЛИЧНО

спасибо вам всем дорогие друзья помогли решить проблему
спасибо
 
Ребята, а как сделать для этого макроса отступ в 5 строк?
То есть чтобы все действия происходили ниже 5 строки
 
Ну вот КТО мешал сразу показать реальную структуру таблицы? Кто?
 
а вот как сменит ("A1:AW1"))
на другую
чтобы колонки сортировки втало например до конца ("A1:IV1"))

что то у меня не получилось

вместо AW пишу IV но не получается
как быть????
 
Viggi и Exhaust_ на ваш вопрос отвечает строка
Код
Range(Cells(2, 1), Cells(LastRow, 49))
, где 2 - номер строки первой ссылки, 1 - номер столбца первой ссылки (т.е. А2)
LastRow - автоматически определяет номер последней строки для второй ссылки, 49 - номер столбца для второй ссылки. (49 столбцу соответствует AW).
A1:AW1 - этот диапазон в котором считывается клик
Изменено: V - 23 Май 2013 14:40:36
 
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LastRow As Long
Dim lLastCol As Long
    LastRow = Cells(Rows.Count, Target.Column).End(xlUp).Row
    lLastCol = Cells(LastRow, Columns.Count).End(xlToLeft).Column
    If Target.Cells.Count > 1 Then Exit Sub
            If Not Intersect(Target, Range(Cells(1, 1), Cells(1, lLastCol))) Is Nothing Then
            Range(Cells(2, 1), Cells(LastRow, lLastCol)).Sort Key1:=Target.Offset(1, 0), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    End If
End Sub
 
ооо
все как интересно и классно
и все понятно

а вот какое слово тут означаетс по возрастанию
и как го смени на убывание
когда нужно сделаеш так или обратно

а самое интересное - можно ли сделать так - первый клик сортировка  в одену сторону - повторный в другую
 
Цитата
Viggi пишет:
а вот какое слово тут означаетс по возрастанию
Order1:=xlAscending
по убыванию.
Order1:=xlDescending
Изменено: V - 23 Май 2013 15:32:31
 
спасибо большое
 
V, замечательно!
Приспособил себе таким образом, на примере работает. Но есть конфликты с другими макросами...
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=48355
Dim LastRow As Long
    If Target.Cells.Count > 1 Then Exit Sub
        If Not Intersect(Target, Range("D6:V6")) Is Nothing Then
            LastRow = Cells(Rows.Count, Target.Column).End(xlUp).Row
            Range(Cells(7, 1), Cells(LastRow, 49)).Sort Key1:=Target.Offset(1, 0), Order1:=xlAscending, Header:= _
            xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
            DataOption1:=xlSortNormal
    End If
End Sub


...Но есть конфликты с другими макросами. Можете помочь? Хотя бы указать на "скользкие" места.
Скрины выложил. Публикую макросы на листе и для всей книги (исходник выложить не могу):

Скрытый текст

Все файлы удалены. См. в правилах ограничение на вложение (не более 100 Кб)[МОДЕРАТОР]
 
Exhaust_ у вас на одно событие Worksheet_SelectionChange два кода - это неправильно, нужно их объединить.
 
А как так? Они же в разных листах - один в "Лист1 (База)", другой - в "Эта книга"
 
судя по первому скрину (если вы монтажем не занимались) в одном модуле листа.  :)  
про Workbook_SheetSelectionChange я речи не вел.
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range([cell_address])..................
End Sub
---------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 'http://www.planetaexcel.ru/forum/?PAGE_NAME=read&FID=1&TID=48355
Dim LastRow As Long......................
Изменено: V - 23 Май 2013 18:26:14
 
Когда объедению все равно ту же ошибку выдает. А объедению убирая 2 строки:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range([cell_address]).Interior.ColorIndex = 43 Then Range([cell_address]).Offset(, -1).Clear
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("J7:J10000" ;) ) Is Nothing Then
If Target.Offset(, 1).Interior.ColorIndex = 43 Then Exit Sub
DateForm.Show
End If
If Not Intersect(Target, Range("K7:K10000" ;) ) Is Nothing Then
With ThisWorkbook.Names
.Add "cell_address", Target.Address, False
.Add "cell_color", Target.Interior.ColorIndex, False
End With
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim LastRow As Long
If Target.Cells.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("D6:V6" ;) ) Is Nothing Then
LastRow = Cells(Rows.Count, Target.Column).End(xlUp).Row
Range(Cells(7, 1), Cells(LastRow, 49)).Sort Key1:=Target.Offset(1, 0), Order1:=xlAscending, Header:= _
xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End If
End Sub

Я правильно делаю?
 
Неправильно:
1. Код следует оформлять тегом.
2. Нужно указывать, на какую строку ругается дебагер.
3. Меня смущает такая запись:
Код
If Range([cell_address])
 
вот один вопрос выходит при работе

я исползую вот этот код

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim LastRow As Long
Dim lLastCol As Long
   LastRow = Cells(Rows.Count, Target.Column).End(xlUp).Row
   lLastCol = Cells(LastRow, Columns.Count).End(xlToLeft).Column
   If Target.Cells.Count > 1 Then Exit Sub
           If Not Intersect(Target, Range(Cells(1, 1), Cells(1, lLastCol))) Is Nothing Then
           Range(Cells(2, 1), Cells(LastRow, lLastCol)).Sort Key1:=Target.Offset(1, 0), Order1:=xlAscending, Header:= _
           xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
           DataOption1:=xlSortNormal
   End If
End Sub

но вот что выходит

при сортировке последняя колонка  IV не меняется

осталнные меняются как в диапазоне а она нет
 
Посмотрите в режиме отладки - чему у Вас равно значение lLastCol? Возможно, что в строке, по которой Вы определяете номер последнего столбца, нет значений в столбце IV . Определяйте по строке заголовков.
 
lLastCol = Cells(LastRow, Columns.Count).End(xlToLeft).Column в этой строке мы определяем номер последнего заполненного столбца, по найденной ранее с помощью LastRow строке. Если эта строка не всегда будет заполнена до конца то LastRow нужно заменить на номер точно заполненной строки. как вариант если предыдущая строчка точно будет заполнена до конце то LastRow-1.
 
вед у меня тоже
lLastCol = Cells(LastRow, Columns.Count).End(xlToLeft).Column

но не получается
 
Viggi я просто описал процесс, чтоб вам проще было искать и поправить.
Страницы: 1 2 3 След.
Читают тему (гостей: 1)