Доброго времени суток. Ситуация следующая: Есть таблица со сроками годности товара, хочу сделать что бы при нажатии кнопки производилась сортировка от более старых к более новым в диапазоне одной строки. И такое действие должно происходить в каждой из строчек, сейчас их у меня 158. Но в дальнейшем это число строк может меняться как в большую так и меньшую сторону. При записи макраса для одной строки все гуд, но к остальным строчкам не работает. Пробовал адаптировать вариант из темы.
[vba]
Код
ActiveWorkbook.Worksheets("TDSheet").Sort.SortFields.Clear ActiveWorkbook.Worksheets("TDSheet").Sort.SortFields.Add Key:=Range("F7:AD7") _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("TDSheet").Sort .SetRange Range("F7:AD7") .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With End Sub
[/vba]
Диапазон AD7 уходит до 158. В одной строке может быть до 25 значений
Доброго времени суток. Ситуация следующая: Есть таблица со сроками годности товара, хочу сделать что бы при нажатии кнопки производилась сортировка от более старых к более новым в диапазоне одной строки. И такое действие должно происходить в каждой из строчек, сейчас их у меня 158. Но в дальнейшем это число строк может меняться как в большую так и меньшую сторону. При записи макраса для одной строки все гуд, но к остальным строчкам не работает. Пробовал адаптировать вариант из темы.
[vba]
Код
ActiveWorkbook.Worksheets("TDSheet").Sort.SortFields.Clear ActiveWorkbook.Worksheets("TDSheet").Sort.SortFields.Add Key:=Range("F7:AD7") _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("TDSheet").Sort .SetRange Range("F7:AD7") .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With End Sub
[/vba]
Диапазон AD7 уходит до 158. В одной строке может быть до 25 значенийRusLes
Сообщение отредактировал RusLes - Понедельник, 09.04.2018, 16:37
Макрос ищет последнюю строку с данными по столбцу "A". Затем макрос двигается от второй строки до последней. Предполагается, что первая строка шапка таблицы.
[vba]
Код
Sub Сортировка()
Dim sh As Worksheet Dim lr As Long, i As Long
Application.ScreenUpdating = False Set sh = ActiveSheet 'поиск последней строки с данными по столбцу "A" lr = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
sh.Sort.Header = xlNo sh.Sort.SortFields.Clear sh.Sort.SortFields.Add Key:=sh.Rows(2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal For i = 2 To lr sh.Sort.SortFields(1).ModifyKey Key:=sh.Rows(i) sh.Sort.SetRange sh.Range(sh.Cells(i, "F"), sh.Cells(i, "AD")) sh.Sort.MatchCase = False sh.Sort.Orientation = xlLeftToRight sh.Sort.Apply Next i
Макрос ищет последнюю строку с данными по столбцу "A". Затем макрос двигается от второй строки до последней. Предполагается, что первая строка шапка таблицы.
[vba]
Код
Sub Сортировка()
Dim sh As Worksheet Dim lr As Long, i As Long
Application.ScreenUpdating = False Set sh = ActiveSheet 'поиск последней строки с данными по столбцу "A" lr = sh.Cells(sh.Rows.Count, "A").End(xlUp).Row
sh.Sort.Header = xlNo sh.Sort.SortFields.Clear sh.Sort.SortFields.Add Key:=sh.Rows(2), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal For i = 2 To lr sh.Sort.SortFields(1).ModifyKey Key:=sh.Rows(i) sh.Sort.SetRange sh.Range(sh.Cells(i, "F"), sh.Cells(i, "AD")) sh.Sort.MatchCase = False sh.Sort.Orientation = xlLeftToRight sh.Sort.Apply Next i
Тыкнул в ссылку, а там, оказывается, мой макрос... [vba]
Код
Sub мяу() Dim r As Range, i& With ActiveWorkbook.Worksheets(1) For i = 7 To .Cells(.Rows.Count, "F").End(xlUp).Row Set r = .Range("F" & i).Resize(, 25) With .Sort .SortFields.Clear .SortFields.Add Key:=r(1) _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortNormal .SetRange r .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With Next End With End Sub
[/vba]
Тыкнул в ссылку, а там, оказывается, мой макрос... [vba]
Код
Sub мяу() Dim r As Range, i& With ActiveWorkbook.Worksheets(1) For i = 7 To .Cells(.Rows.Count, "F").End(xlUp).Row Set r = .Range("F" & i).Resize(, 25) With .Sort .SortFields.Clear .SortFields.Add Key:=r(1) _ , SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:= _ xlSortNormal .SetRange r .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With Next End With End Sub
Karataev Спасибо! Все работает хорошо и очень быстро. Только сортировка происходит от более свежей даты, а хотелось бы что бы наименьшая дата была слева и вправо шли более свежие даты.
Karataev Спасибо! Все работает хорошо и очень быстро. Только сортировка происходит от более свежей даты, а хотелось бы что бы наименьшая дата была слева и вправо шли более свежие даты.RusLes