Сортировка в MS EXCEL
Нужен совет!
Есть таблица (файл прилагаю), есть несколько столбцов в которых есть столбцы обьединенных ячеек, и столбцы НЕобьединенных. Необходимо отсортировать данные по столбцу "Исполнитель" так, чтобы данные столбца "ПЕРЕЧЕНЬ ДОГОВОРОВ" не перепутались, т. е. по относились к прежнему исполнителю.
Сейчас Ексель не позволяет вообще никак сортировать :( А очень нужно сделать именно так...
Заранее благодарен,
с уважением,
Доброго дня!!!
Нужен совет!
Есть таблица (файл прилагаю), есть несколько столбцов в которых есть столбцы обьединенных ячеек, и столбцы НЕобьединенных. Необходимо отсортировать данные по столбцу "Исполнитель" так, чтобы данные столбца "ПЕРЕЧЕНЬ ДОГОВОРОВ" не перепутались, т. е. по относились к прежнему исполнителю.
Сейчас Ексель не позволяет вообще никак сортировать :( А очень нужно сделать именно так...
Заранее благодарен,
с уважением,
Чегой-то архив твой у меня не скачивается (0 байт получается). Назови его английскими буквами, пожалуйста. ;)
Чегой-то архив твой у меня не скачивается (0 байт получается). Назови его английскими буквами, пожалуйста. ;)
Прикрепить-то забыл, ну тип... :)
Прикрепить-то забыл, ну тип... :)
Ну хоть убей - 0 байт. :{
Ну хоть убей - 0 байт. :{
Однако пробую еще раз, упаковал в rar
Однако пробую еще раз, упаковал в rar
Что-то у тебя не прходят аттачменты. Я сегодня в другой теме что-то аттачил, все нормально. Так что проблема у тебя, а не у форума. Ладно, шли мне его на мейл: korzz собака pisem точка net.
Что-то у тебя не прходят аттачменты. Я сегодня в другой теме что-то аттачил, все нормально. Так что проблема у тебя, а не у форума. Ладно, шли мне его на мейл: korzz собака pisem точка net.
Получил твой файл. Задачу понял. В одну строчку это не сделаешь, так что надо подумать, как бы поэлегантней все реализовать.
А почему ты не сделал все эти штуки:
Договор:
Предмет:
Условия оплаты:
Сумма:
Срок поставки:
Увеличение:
Условия отгрузки:
Замечания:
по горизонтали (как заголовки столбцов)?
На мой взгляд, так бы было даже нагляднее - сразу видно, у кого срок поставки, скажем, не определен...
Но это я так, к слову. Задачи это не снимает...
Создаем 2 вспомогательных листа. Первый заполняем так: фамилия, первая строка с этой фамилией, количество строк. Сортируем это по фамилии. Потом при помощи информации о первой строке и количестве создаем на втором листе уже отсортированный шаблон (копируя целыми блоками строк). Потом копируем весь отсортированный список на первоначальный лист, и два вспомогательных удаляем. Если хочешь, попробуй сам написать, если не получится, я в понедельник наверное напишу и сюда положу.
Как сделать я придумал, но на работе такая запарка, что до понедельника я тебе подпрограммку не смогу скинуть. Могу кратенько описать алгоритм:
Создаем 2 вспомогательных листа. Первый заполняем так: фамилия, первая строка с этой фамилией, количество строк. Сортируем это по фамилии. Потом при помощи информации о первой строке и количестве создаем на втором листе уже отсортированный шаблон (копируя целыми блоками строк). Потом копируем весь отсортированный список на первоначальный лист, и два вспомогательных удаляем. Если хочешь, попробуй сам написать, если не получится, я в понедельник наверное напишу и сюда положу.
Первым делом спасибо за внимание к моей теме. Алгоритм я понял, но у меня приезжает совет директоров 10-го, и сам понимаешь, мы сейчас все заняты больше подготовкой отчетов (работать не дают нормально :( )Буду очень признателен, а при случае пьем пиво :), если ты накидаешь мне как это будет выглядеть.
С уважением,
Первым делом спасибо за внимание к моей теме. Алгоритм я понял, но у меня приезжает совет директоров 10-го, и сам понимаешь, мы сейчас все заняты больше подготовкой отчетов (работать не дают нормально :( )Буду очень признателен, а при случае пьем пиво :), если ты накидаешь мне как это будет выглядеть.
С уважением,
Вот, лови процедурку:
Dim wsh As Worksheet, wm As Worksheet, wt As Worksheet
Dim i As Long, j As Long, NumSortCol As Long
Dim c As Range
Application.ScreenUpdating = False
'Создаем лист Maket и на нем макет сортируемого дипазона
Set wsh = ThisWorkbook.Worksheets("ШАБЛОН")
Set wm = ThisWorkbook.Worksheets.Add
wm.Name = "Maket"
NumSortCol = 8 'Номер столбца на листе ШАБЛОН, по которому сортируем
i = 4 'Стартовый номер строки на листе ШАБЛОН
j = 1 'Стартовый номер строки на листе Maket
While wsh.Cells(i, NumSortCol).Value <> ""
wm.Cells(j, 1).Value = wsh.Cells(i, NumSortCol).Value
wm.Cells(j, 2).Value = i
wm.Cells(j, 3).Value = wsh.Cells(i, NumSortCol).MergeArea.Rows.Count
j = j + 1
i = i + wsh.Cells(i, NumSortCol).MergeArea.Rows.Count
Wend
wm.Range("A:C").Sort Key1:=wm.Range("A:A"), Order1:=xlAscending, Header:=xlNo
'Создаем лист TempShablon и на нем отсортированный диапазон
Set wt = ThisWorkbook.Worksheets.Add
wt.Name = "TempShablon"
i = 1 'Стартовый номер строки на листе TempShablon
j = 1 'Стартовый номер строки на листе Maket
While wm.Cells(j, 1).Value <> ""
wsh.Range(wsh.Cells(wm.Cells(j, 2).Value, 1), _
wsh.Cells(wm.Cells(j, 2).Value + _
wm.Cells(j, 3).Value - 1, 1)).EntireRow.Copy _
Destination:=wt.Cells(i, 1)
wt.Cells(i, 1).Value = j 'Это перепроставление порядкового номера строки. Если надо, его можно убрать
i = i + wm.Cells(j, 3).Value
j = j + 1
Wend
'Копируем отсортированный диапазон на место старого. Удаляем временные листы
wt.Range(wt.Cells(1, 1), wt.Cells(i - 1, 1)).EntireRow.Copy _
Destination:=wsh.Range("A4") 'i - как раз в конце диапазона
Application.DisplayAlerts = False
wm.Delete
wt.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Пиши, что не так.