Нужно автоматизировать ручную работу: макрос должен сортировать столбец с "уникальным" названием "Сумма многоборья" по убыванию числового значения (правильно - от лучшего к худшему). Сам столбец может иметь разное положение - но название его неизменно. Сортировать (по простому - найти победителя, призера) нужно во всех листах от м_1 до м_11 (11 листов) и ж_1 - ж_11 (тоже 11 листов). Сортировка должна быть по строкам, что бы результат например Иры не присвоился другой девочке. Порядковый номер в столбце А лучше сохранить. (или вручную потом опять проставлю)
Нужно автоматизировать ручную работу: макрос должен сортировать столбец с "уникальным" названием "Сумма многоборья" по убыванию числового значения (правильно - от лучшего к худшему). Сам столбец может иметь разное положение - но название его неизменно. Сортировать (по простому - найти победителя, призера) нужно во всех листах от м_1 до м_11 (11 листов) и ж_1 - ж_11 (тоже 11 листов). Сортировка должна быть по строкам, что бы результат например Иры не присвоился другой девочке. Порядковый номер в столбце А лучше сохранить. (или вручную потом опять проставлю)maslenkin
Наверное, требуется сортировать всю таблицу по столбцу, т.е. на каждом листе нужно ещё определять размер таблицы. Если нужно просто найти победителя, то сортировать ни к чему.
Наверное, требуется сортировать всю таблицу по столбцу, т.е. на каждом листе нужно ещё определять размер таблицы. Если нужно просто найти победителя, то сортировать ни к чему.Udik
вот вам барабан яд 41001231307558 wm R419131876897 udik1968@gmail.com
Сообщение отредактировал Udik - Вторник, 14.02.2017, 17:28
на листе м_1 нужно сортировать всю таблицу начиная с 6-ой строки, по столбу с названием "Сумма многоборья". размер таблицы может быть разный, это так, но я думал что возможно привязаться в каждом листе к уникальному названию столбца "Сумма многоборья". Сортировать нужно для последующий печати протокола.
на листе м_1 нужно сортировать всю таблицу начиная с 6-ой строки, по столбу с названием "Сумма многоборья". размер таблицы может быть разный, это так, но я думал что возможно привязаться в каждом листе к уникальному названию столбца "Сумма многоборья". Сортировать нужно для последующий печати протокола.maslenkin
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]
Если правильно понял, то так [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
Udik, снимаю перед вами шляпу. Все работает. Еще бы исключить из сортировки столбец А, что бы порядковый номер не сбивался - бесценный макрос выйдет.
Udik, снимаю перед вами шляпу. Все работает. Еще бы исключить из сортировки столбец А, что бы порядковый номер не сбивался - бесценный макрос выйдет.maslenkin
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