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

Вход

Регистрация

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

 

= Мир MS Excel/макрос для сортировки уникального столба в N-листах - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
Страница 1 из 11
Модератор форума: _Boroda_, Pelena, Manyasha, SLAVICK 
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос для сортировки уникального столба в N-листах (Макросы/Sub)
макрос для сортировки уникального столба в N-листах
maslenkin Дата: Вторник, 14.02.2017, 17:05 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Нужно автоматизировать ручную работу: макрос должен сортировать столбец с "уникальным" названием "Сумма многоборья" по убыванию числового значения (правильно - от лучшего к худшему). Сам столбец может иметь разное положение - но название его неизменно. Сортировать (по простому - найти победителя, призера) нужно во всех листах от м_1 до м_11 (11 листов) и ж_1 - ж_11 (тоже 11 листов). Сортировка должна быть по строкам, что бы результат например Иры не присвоился другой девочке. Порядковый номер в столбце А лучше сохранить. (или вручную потом опять проставлю)
К сообщению приложен файл: 3335149.xlsm(85Kb)
 
Ответить
СообщениеНужно автоматизировать ручную работу: макрос должен сортировать столбец с "уникальным" названием "Сумма многоборья" по убыванию числового значения (правильно - от лучшего к худшему). Сам столбец может иметь разное положение - но название его неизменно. Сортировать (по простому - найти победителя, призера) нужно во всех листах от м_1 до м_11 (11 листов) и ж_1 - ж_11 (тоже 11 листов). Сортировка должна быть по строкам, что бы результат например Иры не присвоился другой девочке. Порядковый номер в столбце А лучше сохранить. (или вручную потом опять проставлю)

Автор - maslenkin
Дата добавления - 14.02.2017 в 17:05
Udik Дата: Вторник, 14.02.2017, 17:23 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1556
Репутация: 189 ±
Замечаний: 0% ±

Excel 2016 х 64
Наверное, требуется сортировать всю таблицу по столбцу, т.е. на каждом листе нужно ещё определять размер таблицы. Если нужно просто найти победителя, то сортировать ни к чему.


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Вторник, 14.02.2017, 17:28
 
Ответить
СообщениеНаверное, требуется сортировать всю таблицу по столбцу, т.е. на каждом листе нужно ещё определять размер таблицы. Если нужно просто найти победителя, то сортировать ни к чему.

Автор - Udik
Дата добавления - 14.02.2017 в 17:23
maslenkin Дата: Вторник, 14.02.2017, 18:38 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
на листе м_1 нужно сортировать всю таблицу начиная с 6-ой строки, по столбу с названием "Сумма многоборья". размер таблицы может быть разный, это так, но я думал что возможно привязаться в каждом листе к уникальному названию столбца "Сумма многоборья". Сортировать нужно для последующий печати протокола.
 
Ответить
Сообщениена листе м_1 нужно сортировать всю таблицу начиная с 6-ой строки, по столбу с названием "Сумма многоборья". размер таблицы может быть разный, это так, но я думал что возможно привязаться в каждом листе к уникальному названию столбца "Сумма многоборья". Сортировать нужно для последующий печати протокола.

Автор - maslenkin
Дата добавления - 14.02.2017 в 18:38
Udik Дата: Вторник, 14.02.2017, 20:23 | Сообщение № 4
Группа: Друзья
Ранг: Старожил
Сообщений: 1556
Репутация: 189 ±
Замечаний: 0% ±

Excel 2016 х 64
Если правильно понял, то так
[vba]
Код

Option Explicit

Public Sub main1()
    Dim wshCurr As Worksheet
    Dim rng1 As Range
    Dim rowLast As Long, clnSumMng&, rowStart&
    
    For Each wshCurr In ThisWorkbook.Worksheets
        If wshCurr.Name = "свод" Then
        Else
            Set rng1 = wshCurr.Cells.Find(What:="сумма многоборья", After:=wshCurr.Cells(1, 1), LookIn:=xlValues _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
            If Not rng1 Is Nothing Then
                clnSumMng = rng1.Column
                rowLast = wshCurr.Cells(Rows.Count, clnSumMng).End(xlUp).Row
                Set rng1 = wshCurr.Cells.Find(What:="Номер", After:=wshCurr.Cells(1, 1), LookIn:=xlValues _
                , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
                If Not rng1 Is Nothing Then
                    rowStart = rng1.Row + 3
                    With wshCurr
                        Set rng1 = .Range(.Cells(rowStart, 1), .Cells(rowLast, clnSumMng))
                        .Sort.SortFields.Clear
                        .Sort.SortFields.Add Key:=.Range(.Cells(rowStart, clnSumMng), .Cells(rowLast, clnSumMng)), _
                        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
                        With .Sort
                            .SetRange rng1
                            .Header = xlGuess
                            .MatchCase = False
                            .Orientation = xlTopToBottom
                            .SortMethod = xlPinYin
                            .Apply
                        End With
                    End With
                End If
            End If
        End If
    Next
End Sub

[/vba]
К сообщению приложен файл: 0950934.xlsm(95Kb)


вот вам барабан
яд 41001231307558 wm R419131876897
udik1968@gmail.com


Сообщение отредактировал Udik - Вторник, 14.02.2017, 20:30
 
Ответить
СообщениеЕсли правильно понял, то так
[vba]
Код

Option Explicit

Public Sub main1()
    Dim wshCurr As Worksheet
    Dim rng1 As Range
    Dim rowLast As Long, clnSumMng&, rowStart&
    
    For Each wshCurr In ThisWorkbook.Worksheets
        If wshCurr.Name = "свод" Then
        Else
            Set rng1 = wshCurr.Cells.Find(What:="сумма многоборья", After:=wshCurr.Cells(1, 1), LookIn:=xlValues _
            , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False)
            If Not rng1 Is Nothing Then
                clnSumMng = rng1.Column
                rowLast = wshCurr.Cells(Rows.Count, clnSumMng).End(xlUp).Row
                Set rng1 = wshCurr.Cells.Find(What:="Номер", After:=wshCurr.Cells(1, 1), LookIn:=xlValues _
                , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                MatchCase:=False, SearchFormat:=False)
                If Not rng1 Is Nothing Then
                    rowStart = rng1.Row + 3
                    With wshCurr
                        Set rng1 = .Range(.Cells(rowStart, 1), .Cells(rowLast, clnSumMng))
                        .Sort.SortFields.Clear
                        .Sort.SortFields.Add Key:=.Range(.Cells(rowStart, clnSumMng), .Cells(rowLast, clnSumMng)), _
                        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
                        With .Sort
                            .SetRange rng1
                            .Header = xlGuess
                            .MatchCase = False
                            .Orientation = xlTopToBottom
                            .SortMethod = xlPinYin
                            .Apply
                        End With
                    End With
                End If
            End If
        End If
    Next
End Sub

[/vba]

Автор - Udik
Дата добавления - 14.02.2017 в 20:23
maslenkin Дата: Среда, 15.02.2017, 13:02 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 43
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Udik, снимаю перед вами шляпу. Все работает. Еще бы исключить из сортировки столбец А, что бы порядковый номер не сбивался - бесценный макрос выйдет.
 
Ответить
СообщениеUdik, снимаю перед вами шляпу. Все работает. Еще бы исключить из сортировки столбец А, что бы порядковый номер не сбивался - бесценный макрос выйдет.

Автор - maslenkin
Дата добавления - 15.02.2017 в 13:02
devilkurs Дата: Среда, 15.02.2017, 14:17 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
Тоже самое, тока вид с другого бока )))

[vba]
Код
Sub Сортировка()
    Dim S, C%, C_end%, R_end%, i%
    On Error GoTo next_:
    For Each S In Sheets
        If Left(S.Name, 2) = "м_" Or Left(S.Name, 2) = "ж_" Then
            C = 0: C = S.Rows("1:5").Find("Сумма многоборья").Column
            C_end = S.Cells(6, S.Columns.Count).End(xlToLeft).Column
            R_end = S.Cells(S.Rows.Count, 2).End(xlUp).Row
            With S.Sort
                .SortFields.Clear
                .SortFields.Add Key:=Range(Cells(6, C), Cells(R_end, C)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
                .SetRange Range(Cells(6, 2), Cells(R_end, C_end))
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End If
next_:
    Next S
End Sub
[/vba]


 
Ответить
СообщениеТоже самое, тока вид с другого бока )))

[vba]
Код
Sub Сортировка()
    Dim S, C%, C_end%, R_end%, i%
    On Error GoTo next_:
    For Each S In Sheets
        If Left(S.Name, 2) = "м_" Or Left(S.Name, 2) = "ж_" Then
            C = 0: C = S.Rows("1:5").Find("Сумма многоборья").Column
            C_end = S.Cells(6, S.Columns.Count).End(xlToLeft).Column
            R_end = S.Cells(S.Rows.Count, 2).End(xlUp).Row
            With S.Sort
                .SortFields.Clear
                .SortFields.Add Key:=Range(Cells(6, C), Cells(R_end, C)), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
                .SetRange Range(Cells(6, 2), Cells(R_end, C_end))
                .Header = xlGuess
                .MatchCase = False
                .Orientation = xlTopToBottom
                .SortMethod = xlPinYin
                .Apply
            End With
        End If
next_:
    Next S
End Sub
[/vba]

Автор - devilkurs
Дата добавления - 15.02.2017 в 14:17
devilkurs Дата: Среда, 15.02.2017, 14:23 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
maslenkin, Чтоб убрать из сортировка столбец А в коде уважаемого Udik замените цифру 1 на 2 в строке

[vba]
Код
Set rng1 = .Range(.Cells(rowStart, 1), .Cells(rowLast, clnSumMng))
[/vba]


 
Ответить
Сообщениеmaslenkin, Чтоб убрать из сортировка столбец А в коде уважаемого Udik замените цифру 1 на 2 в строке

[vba]
Код
Set rng1 = .Range(.Cells(rowStart, 1), .Cells(rowLast, clnSumMng))
[/vba]

Автор - devilkurs
Дата добавления - 15.02.2017 в 14:23
Мир MS Excel » Вопросы и решения » Вопросы по VBA » макрос для сортировки уникального столба в N-листах (Макросы/Sub)
Страница 1 из 11
Поиск:

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