Макро – сортировка нескольких уровней по имени столбца
Я загружаю набор данных из программы, которую я положил в excel. Отсюда я хотел бы отсортировать эти данные на двух уровнях. Для этого я записал макрос, который служит основной цели.
Проблема в том, что я хотел бы, чтобы макрос искал имена столбцов (поскольку нет необходимости, чтобы столбцы всегда были в B & F) и сортировать соответственно. Следовательно, я хотел бы, чтобы код был таким, что он ищет столбцы под названием «Asset Name» и «Action» и сортирует их.
Вот код макроса, который я записал: (я помещал в диапазон 50000, так как я хотел, чтобы он был динамическим для строк, а не статическими, что делает запись макросов)
- Сортировка по строкам
- Excel: формула для сортировки набора данных
- Извлечение уникальных значений из списка и сортировка по вхождению в Excel
- Excel: сортировка диапазона данных по одной ячейке при сохранении строк
- Сортировка таблицы, которую использует другой лист Excel, вызывает различные результаты VLOOKUP
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)
- Excel - сортировка и выбор в защищенном листе
- Переупорядочить файл csv по именам заголовков
- Excel VBA - многоуровневая сортировка
- Требуется Excel Forumla для сортировки 2 столбцов, в которых оба содержат формулы массива
- Экспорт в Excel непосредственно из источника данных с сортировкой и группировкой для пользовательского интерфейса Kendo
- Сортировка по цвету и выходу в другое место
- Excel: закажите столбец на основе другого столбца
- Добавление нового рабочего листа в его по алфавиту правильное положение
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