Страницы: 1
RSS
Посортировать строки по данным столбца и разделить пустой строкой
 
Есть файлы с данными в столбцах, вот такие:


Нужно выполнить по порядку вот такие действия в каждом файле. Файлов и данных много. Хотелось бы автоматизировать монотонную работу, если это возможно.
Вот что нужно сделать.

1) Отсортировать данные по столбцу "Category", чтобы стало вот так


2) Вставить пустую строку после окончания блока с одинаковыми названиями в столбце "Category", чтобы стало вот так:


3) Отсортировать строки в каждом блоке разделенном пустой строкой по столбцу "Количество" (по возрастанию), чтобы стало вот так:


Заранее благодарен за помощь
 
Код
Sub SortAndAddRows(wb As Workbook)
  Dim r&, c&
  With wb.Worksheets(1)
    SortRangeBy .[a1].CurrentRegion, Array(2, 3)
    r = 2
    Do While Not IsEmpty(.Cells(r, 2))
      c = WorksheetFunction.CountIf(.Columns(2), .Cells(r, 2))
      .Rows(r + c).Insert
      r = r + c + 1
    Loop
  End With
End Sub

Sub SortRangeBy(rg As Range, c, Optional Hd& = 1)
  Dim i&
  With rg.Parent.Sort
    .SortFields.Clear
    For i = LBound(c) To UBound(c)
      .SortFields.Add Key:=rg.Cells(1).Offset(Hd, Abs(c(i)) - 1).Resize( _
      rg.Rows.Count - Hd, 1), SortOn:=xlSortOnValues, Order:=IIf(c(i) > 0, _
      1, 2), DataOption:=xlSortNormal
    Next
    .SetRange rg: .Header = Hd: .MatchCase = False
    .Orientation = xlTopToBottom: .SortMethod = xlPinYin: .Apply
  End With
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, спасибо за макрос. Вот только почему-то он у меня не появляется в списке выполнения....

Я открыл файл и нажал Alt+F11, создал новый модуль, нажав на Inserte module и в него вставил код вашего макроса и сохранил изменения.

После чего, нажимаю Alt+F8 чтобы увидеть данный макрос и запустить его выполнение, но список пуст....

Всегда так делал и макрос был в списке... Или может как-то по другому нужно сделать? Заранее благодарен за помощь
 
Цитата
realmen80 написал:
Нужно выполнить по порядку вот такие действия в каждом файле. Файлов и данных много
напишите еще один Sub из него вызывайте SortAndAddRows передавая ей по очереди ваши файлы (уже открытые книги Excel)
Цитата
realmen80 написал:
Всегда так делал и макрос был в списке...
видите и один макрос и другой имеют параметры, выполнить макрос не передав ему необходимый для его работы параметр - невозможно
выполнить макрос с указанием параметра не предусмотрено в окне по Alt+F8
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
Ігор Гончаренко написал: напишите еще один Sub из него вызывайте SortAndAddRows передавая ей по очереди ваши файлы (уже открытые книги Excel)
К сожалению, я не знаю как это сделать...
Посмотрел вот тут https://vremya-ne-zhdet.ru/vba-excel/vyzov-protsedury-call-applicationrun/#Vyzov_procedur_Sub_v_pred...
Вызов подпрограмм без аргументов в пределах одного модуля мне нужен? Вот так вызывать SortAndAddRows нужно?
Код
Public Sub SortAndAddRows()
End Sub
Цитата
Ігор Гончаренко написал: выполнить макрос с указанием параметра не предусмотрено в окне по Alt+F8
Получается, мы пишем еще один Sub, который будет уже без аргументов и он будет вызывать SortAndAddRows и его уже можно будет запустить в окне по Alt+F8, правильно я понимаю? Или вообще через Alt+F8 я никак не смогу запустить данный скрипт на выполнение?
Или его нужно будет через кнопку запускать

или еще как-то по другому?
Изменено: vikttur - 14.06.2021 13:04:59
 
Цитата
realmen80 написал:
К сожалению, я не знаю как это сделать...
к сожаление, мне не интересно на полдня вступать в переписку с обьяснениями что и как нужно делать
(имею большие сомнения что этот процесс уложится в полдня)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Понимаю Вас. В любом случае, спасибо за попытку помочь.... Самому неудобно от того что я такой тупой в этих кодах и макросах...
Понимаю, что для Вас это самые элементарные вещи... Кажется ну как это можно не понимать, ну это же так просто...

Еще раз благодарю за уделенное мне время и за макрос. Может кто из форумчан дальше подскажет как мне его запустить.  
Изменено: vikttur - 14.06.2021 13:05:26
Страницы: 1
Наверх