Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Сортировка в MS EXCEL

1.9K
02 июля 2003 года
DKef
44 / / 11.03.2003
Доброго дня!!!

Нужен совет!
Есть таблица (файл прилагаю), есть несколько столбцов в которых есть столбцы обьединенных ячеек, и столбцы НЕобьединенных. Необходимо отсортировать данные по столбцу "Исполнитель" так, чтобы данные столбца "ПЕРЕЧЕНЬ ДОГОВОРОВ" не перепутались, т. е. по относились к прежнему исполнителю.
Сейчас Ексель не позволяет вообще никак сортировать :( А очень нужно сделать именно так...

Заранее благодарен,
с уважением,
267
02 июля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by DKef
Доброго дня!!!

Нужен совет!
Есть таблица (файл прилагаю), есть несколько столбцов в которых есть столбцы обьединенных ячеек, и столбцы НЕобьединенных. Необходимо отсортировать данные по столбцу "Исполнитель" так, чтобы данные столбца "ПЕРЕЧЕНЬ ДОГОВОРОВ" не перепутались, т. е. по относились к прежнему исполнителю.
Сейчас Ексель не позволяет вообще никак сортировать :( А очень нужно сделать именно так...

Заранее благодарен,
с уважением,



Чегой-то архив твой у меня не скачивается (0 байт получается). Назови его английскими буквами, пожалуйста. ;)

1.9K
02 июля 2003 года
DKef
44 / / 11.03.2003
Чегой-то архив твой у меня не скачивается (0 байт получается). Назови его английскими буквами, пожалуйста. ;)
1.9K
02 июля 2003 года
DKef
44 / / 11.03.2003
Цитата:
Originally posted by DKef
Чегой-то архив твой у меня не скачивается (0 байт получается). Назови его английскими буквами, пожалуйста. ;)


Прикрепить-то забыл, ну тип... :)

267
02 июля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by DKef

Прикрепить-то забыл, ну тип... :)



Ну хоть убей - 0 байт. :{

1.9K
02 июля 2003 года
DKef
44 / / 11.03.2003
Цитата:
Originally posted by Cutty Sark


Ну хоть убей - 0 байт. :{


Однако пробую еще раз, упаковал в rar

267
02 июля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by DKef

Однако пробую еще раз, упаковал в rar



Что-то у тебя не прходят аттачменты. Я сегодня в другой теме что-то аттачил, все нормально. Так что проблема у тебя, а не у форума. Ладно, шли мне его на мейл: korzz собака pisem точка net.

267
02 июля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by Cutty Sark


Что-то у тебя не прходят аттачменты. Я сегодня в другой теме что-то аттачил, все нормально. Так что проблема у тебя, а не у форума. Ладно, шли мне его на мейл: korzz собака pisem точка net.



Получил твой файл. Задачу понял. В одну строчку это не сделаешь, так что надо подумать, как бы поэлегантней все реализовать.

А почему ты не сделал все эти штуки:

Договор:
Предмет:
Условия оплаты:
Сумма:
Срок поставки:
Увеличение:
Условия отгрузки:
Замечания:

по горизонтали (как заголовки столбцов)?
На мой взгляд, так бы было даже нагляднее - сразу видно, у кого срок поставки, скажем, не определен...
Но это я так, к слову. Задачи это не снимает...

267
03 июля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Как сделать я придумал, но на работе такая запарка, что до понедельника я тебе подпрограммку не смогу скинуть. Могу кратенько описать алгоритм:
Создаем 2 вспомогательных листа. Первый заполняем так: фамилия, первая строка с этой фамилией, количество строк. Сортируем это по фамилии. Потом при помощи информации о первой строке и количестве создаем на втором листе уже отсортированный шаблон (копируя целыми блоками строк). Потом копируем весь отсортированный список на первоначальный лист, и два вспомогательных удаляем. Если хочешь, попробуй сам написать, если не получится, я в понедельник наверное напишу и сюда положу.
1.9K
04 июля 2003 года
DKef
44 / / 11.03.2003
Цитата:
Originally posted by Cutty Sark
Как сделать я придумал, но на работе такая запарка, что до понедельника я тебе подпрограммку не смогу скинуть. Могу кратенько описать алгоритм:
Создаем 2 вспомогательных листа. Первый заполняем так: фамилия, первая строка с этой фамилией, количество строк. Сортируем это по фамилии. Потом при помощи информации о первой строке и количестве создаем на втором листе уже отсортированный шаблон (копируя целыми блоками строк). Потом копируем весь отсортированный список на первоначальный лист, и два вспомогательных удаляем. Если хочешь, попробуй сам написать, если не получится, я в понедельник наверное напишу и сюда положу.


Первым делом спасибо за внимание к моей теме. Алгоритм я понял, но у меня приезжает совет директоров 10-го, и сам понимаешь, мы сейчас все заняты больше подготовкой отчетов (работать не дают нормально :( )Буду очень признателен, а при случае пьем пиво :), если ты накидаешь мне как это будет выглядеть.
С уважением,

267
07 июля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by DKef

Первым делом спасибо за внимание к моей теме. Алгоритм я понял, но у меня приезжает совет директоров 10-го, и сам понимаешь, мы сейчас все заняты больше подготовкой отчетов (работать не дают нормально :( )Буду очень признателен, а при случае пьем пиво :), если ты накидаешь мне как это будет выглядеть.
С уважением,



Вот, лови процедурку:

Код:
Sub SuperSort()
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


Пиши, что не так.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог