Макро – сортировка нескольких уровней по имени столбца

Я загружаю набор данных из программы, которую я положил в excel. Отсюда я хотел бы отсортировать эти данные на двух уровнях. Для этого я записал макрос, который служит основной цели.

Проблема в том, что я хотел бы, чтобы макрос искал имена столбцов (поскольку нет необходимости, чтобы столбцы всегда были в B & F) и сортировать соответственно. Следовательно, я хотел бы, чтобы код был таким, что он ищет столбцы под названием «Asset Name» и «Action» и сортирует их.

Вот код макроса, который я записал: (я помещал в диапазон 50000, так как я хотел, чтобы он был динамическим для строк, а не статическими, что делает запись макросов)

Cells.Select ActiveSheet.sort.SortFields.Clear ActiveSheet.sort.SortFields.Add Key:=Range("B2:B50000") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal ActiveSheet.sort.SortFields.Add Key:=Range("F2:F50000") _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal With ActiveSheet.sort .SetRange Range("A1:H50000") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With 

Чтобы включить сортировку по имени столбца, я подумал о том, чтобы использовать ниже, чтобы назначить номер столбца, но я не уверен, где снова вызвать colNum в записанной части макроса.

 Dim colNum As Integer colNum = WorksheetFunction.Match("Asset Name", ActiveSheet.Range("1:1"), 0) 

btw, определяющий диапазон строк «50000», не классифицируется как динамический. Попробуйте ниже

 Sub test() 'Setup column names Col1name = "Asset Name" Col2name = "Action" 'Find cols For Each cell In Range("A1:" & Range("A1").End(xlToRight).Address) If cell.Value = Col1name Then Col1 = cell.Column End If If cell.Value = Col2name Then Col2 = cell.Column End If Next 'Below two line:- if they are blank eg column not found it will error so a small bit of error handling If Col1 = "" Then Exit Sub If Col2 = "" Then Exit Sub 'Find last row - dynamic part lastrow = ActiveSheet.Range("A100000").End(xlUp).Row 'Convert col numer to name Col1 = Split(Cells(1, Col1).Address(True, False), "$") Col2 = Split(Cells(1, Col2).Address(True, False), "$") 'Sort With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Range(Col1(0) & "2:" & Col1(0) & lastrow) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add Key:=Range(Col2(0) & "2:" & Col2(0) & lastrow) _ , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange Range("A1:H" & lastrow) .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With End Sub 

Вот некоторый сокращенный код, который должен дать вам все, что вы ищете.

 With ActiveSheet '<- set this worksheet reference properly With .Range("A1:H50000") .Cells.Sort Key1:=.Columns(Application.Match("Asset Name", .Rows(1), 0)), Order1:=xlAscending, _ Key2:=.Columns(Application.Match("Action", .Rows(1), 0)), Order2:=xlAscending, _ Orientation:=xlTopToBottom, Header:=xlYes End With End With 
  • Каков наилучший способ сортировки строки, учитывая последние символы как числа, в excel vba
  • SIMPLE: сортировать список книг в Интернете в Excel с помощью макроса VBA?
  • Сортировка даты в стиле English
  • Сортировка текста и чисел в Excel
  • Сортировка на защищенном листе Excel
  • значение символа unicode
  • Метод сортировки Excel VBA, ошибка времени выполнения 1004, «Недопустимая ссылка сортировки. Удостоверьтесь, что это ...
  • EXCEL 2013: автоматическая сортировка в workheet_change не сжигание
  • Msgstr "Ошибка выполнения 1004: ссылка недействительна"
  • Как консолидировать похожие записи в отсортированном списке без вывода на рабочий лист с использованием VBA / Excel
  • Как я могу сортировать даты в массиве в vba?
  • Давайте будем гением компьютера.