Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.04.2014, 11:57   #1
Bocul
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 38
По умолчанию Макрос - сортировка по блокам

Добрый день,
подскажите, как составить макрос или каким-то иным путем отсортировать несколько блоков с данными в порядке от большего к меньшему, блоки с данными отделяет 1 пустая строка, пример в аттаче.

тестовый.zip
Bocul вне форума Ответить с цитированием
Старый 18.04.2014, 12:16   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

подсказываю, я составил макрос нажимая кнопки на клавиатуре в определенном порядке.
Код:
Private Sub CommandButton1_Click()
  Dim r1 As Long, r2 As Long
  r1 = 2
  Do While Cells(r1, 1).End(xlDown).Row <> Rows.Count
    r2 = Cells(r1, 1).End(xlDown).Row
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("B" & r1 & ":B" & r2), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("A" & r1 & ":B" & r2): .Header = xlGuess: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin
        .Apply
    End With
    r1 = r2 + 2
  Loop
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.04.2014, 12:50   #3
Bocul
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 38
По умолчанию

Спасибо, все работает четко! Благодарность донесу вечером)
Bocul вне форума Ответить с цитированием
Старый 18.04.2014, 13:06   #4
Bocul
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 38
По умолчанию

Игорь,
не поможете реализовать второй макрос на основании полученной таблицы после использования первого макроса.
нужно в каждом блоке с данными определить лучшего (из столбца справа) и записать перед блоком "Лучший специалист - "имя лучшего"

пример в файле тестовый2.zip
Bocul вне форума Ответить с цитированием
Старый 18.04.2014, 13:35   #5
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

теперь, видимо, так:
Код:
Private Sub CommandButton1_Click()
  Dim r1 As Long, r2 As Long
  r1 = 3
  Do While Cells(r1, 2).End(xlDown).Row <> Rows.Count
    r2 = Cells(r1, 2).End(xlDown).Row
    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range("B" & r1 & ":B" & r2), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range("A" & r1 & ":B" & r2): .Header = xlGuess: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin
        .Apply
    End With
    Cells(r1 - 1, 1) = "Лучший специалист - " & Cells(r1, 1):  Cells(r1 - 1, 1).Interior.Color = 5296274
    r1 = r2 + 2
  Loop
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.04.2014, 14:03   #6
Bocul
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 38
Вопрос

Спасибо, то что нужно - только если у нас массивов будет к примеру 50 или 150, нужно их все прорабатывать и в конце проверять пустые строки, т.е. если идет 2 пустые строки считать концом работы.
Bocul вне форума Ответить с цитированием
Старый 18.04.2014, 14:16   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

последними данными считаются не 2 пустые, а все пустые за последней строкой с данными. возможно колонка 2 у Вас не пустая, а содержит формулу, которая возвращает "" (пустую строку) на вид там пусто, а на самом деле есть данные - пустая строка. присмотритесь что у Вас за последними данными в колонке 2.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.04.2014, 16:10   #8
Bocul
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 38
По умолчанию

Цитата:
Сообщение от IgorGO Посмотреть сообщение
последними данными считаются не 2 пустые, а все пустые за последней строкой с данными. возможно колонка 2 у Вас не пустая, а содержит формулу, которая возвращает "" (пустую строку) на вид там пусто, а на самом деле есть данные - пустая строка. присмотритесь что у Вас за последними данными в колонке 2.
Ошибка происходит когда у нас блок состоит из 1 имени, к примеру

катя 34
оля 23
петя 3
вася 2

саша 423
Bocul вне форума Ответить с цитированием
Старый 18.04.2014, 16:17   #9
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

значит так:
Код:
Private Sub CommandButton1_Click()
  Dim r1 As Long, r2 As Long
  r1 = 3
  Do While Cells(r1, 2).End(xlDown).Row <> Rows.Count
    If Cells(r1 + 1, 2) <> "" Then
      r2 = Cells(r1, 2).End(xlDown).Row
      ActiveSheet.Sort.SortFields.Clear
      ActiveSheet.Sort.SortFields.Add key:=Range("B" & r1 & ":B" & r2), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
      With ActiveSheet.Sort
          .SetRange Range("A" & r1 & ":B" & r2): .Header = xlGuess: .MatchCase = False: .Orientation = xlTopToBottom: .SortMethod = xlPinYin
          .Apply
      End With
    End If
    Cells(r1 - 1, 1) = "Лучший специалист - " & Cells(r1, 1):  Cells(r1 - 1, 1).Interior.Color = 5296274
    r1 = r2 + 2
  Loop
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 18.04.2014, 16:48   #10
Bocul
Пользователь
 
Регистрация: 23.06.2012
Сообщений: 38
По умолчанию

Да работает, но если в группе 1 человек - то по сути он лучший, можно поправить, извиняюсь за не точности в ТЗ.


И еще вопрос в целях самообразования - как вы задаете цвет
.Interior.Color = 5296274

как определить эти цифры у другого цвета, к примеру красный?
Bocul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Макрос постоянно обрабатывает события. При открытии другой книги макрос обрывается. Ples Microsoft Office Excel 8 17.12.2016 18:15
Быстрая сортировка(сортировка Хоара). Сортировка фрагмента массива [C++] druger Помощь студентам 0 20.04.2012 15:49
Exel - при открытии файла через макрос, если файл отсутствует - виснет весь макрос gregory1b Microsoft Office Excel 2 14.10.2010 11:51
Макрос для Excel 2007 сложная сортировка. Vasek007 Microsoft Office Excel 10 27.08.2010 20:16
Макрос вставки файлов в листы-Необходимо изменить ниже приведённый макрос as-is Microsoft Office Excel 4 25.02.2010 07:51