enot7, здравствуйте! Мне непонятна логика сортировки))) Обычно сортируют или как будто букв нет, или как будто чисел нет, а тут полный простор для воображения
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
enot7, для макроса нужен алгоритм и тут у нас 2 варианта: 1. выделить всю область от первой шапки группы "123" (строка 13) до последней строки группы "12345" (строка 45) и отсоритровать каждую группу. Для этого нужно макросу дать понять, какие из строк являются шапками. Я бы ставил в "шапки" какие-нибудь уникальные символы типа "•" (символ 149) и, если он есть в строке, то это шапка. Можно по цвету заливки или по наличию/отстутствию чего-либо ещё. Либо вообще определять не строку шапки группы, а сами строки группы для сортировки. 2. выделять области для сортировки вручную (в примере строки (НЕ ЦЕЛИКОМ) 14-28; 30-33; 35-38; 40-45) и для каждой запускать макрос
Если областей около 10ти, то я бы второй вариант использовал…Что предпочитаете?)))
UPD: поздно выбирать - я уже сделал это за вас
Второй вариант. Можно выделить все области для сортировки сразу
Код
Option Explicit
'===========================================================================================
Sub СортироватьВыделенное()
Dim rng As Range, ar As Range
Const colNum As Byte = 6 ' № столбца в выделенной области, по которому сортируем)
Set rng = Selection
ActiveSheet.AutoFilterMode = False
Application.ScreenUpdating = False
For Each ar In rng.Areas
ar.Sort Key1:=ar.Cells(1, colNum), Order1:=xlDescending, DataOption1:=xlSortNormal, Header:=xlNo, MatchCase:=True, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
Next ar
Application.ScreenUpdating = True
End Sub
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Делаете цикл по столбцу В, в котором есть артикулы с жирным шрифтом (отступ=0) и с обычным шрифтом (отступ=1). По этим признакам можно определить границы диапазона, в котором делать сортировку
enot7, тогда вам всего лишь остаётся определить кодом по подсказкам все области (в моём коде - "ar") а сортировку я вам показал
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Sub Tablica()
Dim i As Long
Dim iLastRow As Long
Dim iBegin As Long
Dim iEnd As Long
iLastRow = Cells(Rows.Count, "B").End(xlUp).Row
iBegin = 14
For i = 14 To iLastRow
iEnd = iBegin
Do While Cells(iEnd + 1, "B").IndentLevel = 1 And iEnd <= iLastRow
iEnd = iEnd + 1
Loop
'определили iBegin и iEnd (14-28,30-33,35-38,40-45 , в этом диапазоне делаем сортировку
'сортировка по столбцу G
'......................
iBegin = iEnd + 2
i = iEnd + 1
Next
End Sub