Добрый день! Спасибо вам за то, что помогаете! У меня вопрос: в прикрепленном файле есть список, состоящий из 114604 строк. Я смог выполнить "вертикальную" сортировку данных. (свой список критериев сортировки я оставил на соседнем листе). Теперь по этому же критерию нужно отдельно (!) отсортировать каждую строку. Как это сделать для такого множества строк? Благодарю вас
Прошу извить, файл оказался слишком большим. Я его уменьшил. Но, думаю, суть понятна
Добрый день! Спасибо вам за то, что помогаете! У меня вопрос: в прикрепленном файле есть список, состоящий из 114604 строк. Я смог выполнить "вертикальную" сортировку данных. (свой список критериев сортировки я оставил на соседнем листе). Теперь по этому же критерию нужно отдельно (!) отсортировать каждую строку. Как это сделать для такого множества строк? Благодарю вас
Прошу извить, файл оказался слишком большим. Я его уменьшил. Но, думаю, суть понятнаilez-zeli
ilez-zeli, наверное можно доработать эту запись рекордера для одной строки - добавить цикл по строкам и готово
[vba]
Код
Sub Макрос3() '
Sheets("база").Select ' Application.AddCustomList ListArray:=Array("сын", "сын сына", "сын сына сына", _ ' "дочь", "2 дочери", "дочь сына", "2 дочери сына", "отец", "отец отца", "мать", _ ' "мать отца", "мать матери", "муж", "жена", "брат", "брат по отцу", "сестра", _ ' "сестра по отцу", "2 сестры", "2 сестры по отцу", "брат по матери", _ ' "сестра по матери", "2 брата по матери", "2 сестры по матери", _ ' "брат и сестра по матери", "брат отца(дядя)") ActiveWorkbook.Worksheets("база").Sort.SortFields.Clear ActiveWorkbook.Worksheets("база").Sort.SortFields.Add2 Key:=Range("A2:F2"), _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "сын,сын сына,сын сына сына,дочь,2 дочери,дочь сына,2 дочери сына,отец,отец отца,мать,мать отца,мать матери,муж,жена,брат,брат по отцу,сестра,сестра по отцу,2 сестры,2 сестры по отцу,брат по матери,сестра по матери,2 брата по матери,2 сестры по матери,брат и сестра по матери,брат отца(дядя)" _ , DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("база").Sort .SetRange Range("A2:F2") .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With End Sub
[/vba]
Вот добавил:
[vba]
Код
Sub Макрос4()
Dim r As Range
Application.ScreenUpdating = False
For Each r In Range("A2:F13254").Rows ActiveWorkbook.Worksheets("база").Sort.SortFields.Clear ActiveWorkbook.Worksheets("база").Sort.SortFields.Add2 Key:=r, _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "сын,сын сына,сын сына сына,дочь,2 дочери,дочь сына,2 дочери сына,отец,отец отца,мать,мать отца,мать матери,муж,жена,брат,брат по отцу,сестра,сестра по отцу,2 сестры,2 сестры по отцу,брат по матери,сестра по матери,2 брата по матери,2 сестры по матери,брат и сестра по матери,брат отца(дядя)" _ , DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("база").Sort .SetRange r .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With Next
Application.ScreenUpdating = True
End Sub
[/vba]
Работает не быстро, но работает.
ilez-zeli, наверное можно доработать эту запись рекордера для одной строки - добавить цикл по строкам и готово
[vba]
Код
Sub Макрос3() '
Sheets("база").Select ' Application.AddCustomList ListArray:=Array("сын", "сын сына", "сын сына сына", _ ' "дочь", "2 дочери", "дочь сына", "2 дочери сына", "отец", "отец отца", "мать", _ ' "мать отца", "мать матери", "муж", "жена", "брат", "брат по отцу", "сестра", _ ' "сестра по отцу", "2 сестры", "2 сестры по отцу", "брат по матери", _ ' "сестра по матери", "2 брата по матери", "2 сестры по матери", _ ' "брат и сестра по матери", "брат отца(дядя)") ActiveWorkbook.Worksheets("база").Sort.SortFields.Clear ActiveWorkbook.Worksheets("база").Sort.SortFields.Add2 Key:=Range("A2:F2"), _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "сын,сын сына,сын сына сына,дочь,2 дочери,дочь сына,2 дочери сына,отец,отец отца,мать,мать отца,мать матери,муж,жена,брат,брат по отцу,сестра,сестра по отцу,2 сестры,2 сестры по отцу,брат по матери,сестра по матери,2 брата по матери,2 сестры по матери,брат и сестра по матери,брат отца(дядя)" _ , DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("база").Sort .SetRange Range("A2:F2") .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With End Sub
[/vba]
Вот добавил:
[vba]
Код
Sub Макрос4()
Dim r As Range
Application.ScreenUpdating = False
For Each r In Range("A2:F13254").Rows ActiveWorkbook.Worksheets("база").Sort.SortFields.Clear ActiveWorkbook.Worksheets("база").Sort.SortFields.Add2 Key:=r, _ SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _ "сын,сын сына,сын сына сына,дочь,2 дочери,дочь сына,2 дочери сына,отец,отец отца,мать,мать отца,мать матери,муж,жена,брат,брат по отцу,сестра,сестра по отцу,2 сестры,2 сестры по отцу,брат по матери,сестра по матери,2 брата по матери,2 сестры по матери,брат и сестра по матери,брат отца(дядя)" _ , DataOption:=xlSortNormal With ActiveWorkbook.Worksheets("база").Sort .SetRange r .Header = xlGuess .MatchCase = False .Orientation = xlLeftToRight .SortMethod = xlPinYin .Apply End With Next
ilez-zeli, по доп таблице присвоены номера..типа порядок в котором вам надо. а в базе в столбцах правее, через ВПР номера (из порядка), которым соответствуют записи.. далее многослойная сортировка по возрастанию по столбцам с цифрами... Наверно макросом будет быстрее и файл поменьше весом....
ilez-zeli, по доп таблице присвоены номера..типа порядок в котором вам надо. а в базе в столбцах правее, через ВПР номера (из порядка), которым соответствуют записи.. далее многослойная сортировка по возрастанию по столбцам с цифрами... Наверно макросом будет быстрее и файл поменьше весом....cmivadwot