Макрос сортировки по алфавиту excel
выражение: переменная, представляющая объект Range.
Параметры
Имя | Обязательный или необязательный | Тип данных | Описание |
---|---|---|---|
Key1 | Необязательный | Variant | Указывает первое поле сортировки в качестве имени диапазона (String) или Объекта Range; определяет значения, которые необходимо сортировать. |
Order1 | Необязательный | XlSortOrder | Определяет порядок сортировки для значений, указанных в Key1. |
Key2 | Необязательный | Variant | Поле второго сортировки; не может использоваться при сортировке pivotTable. |
Type | Необязательный | Variant | Указывает, какие элементы следует сортировать. |
Order2 | Необязательный | XlSortOrder | Определяет порядок сортировки для значений, указанных в Key2. |
Key3 | Необязательный | Variant | Поле третьего сортировки; не может использоваться при сортировке pivotTable. |
Order3 | Необязательный | XlSortOrder | Определяет порядок сортировки для значений, указанных в Key3. |
Header | Необязательный | XlYesNoGuess | Указывает, содержит ли первая строка сведения о загонах. xlNo — это значение по умолчанию; укажите xlGuess, если Excel попытаться определить заголовок. |
OrderCustom | Необязательный | Variant | Указывает одностандартное смещение в список пользовательских заказов сортировки. |
MatchCase | Необязательный | Variant | Set to True to perform a case-sensitive sort, False to perform a non-case-sensitive sort; не может использоваться с pivotTables. |
Orientation | Необязательный | XlSortOrientation | Указывает, должен ли сорт быть строкой (по умолчанию) или столбцом. Установите значение xlSortColumns для сортировки по столбцам. Установите значение xlSortRows до 2 для сортировки по строке (это значение по умолчанию). |
SortMethod | Необязательный | XlSortMethod | Указывает метод сортировки. |
DataOption1 | Необязательный | XlSortDataOption | Указывает, как сортировать текст в диапазоне, указанном в Key1; не применяется к сортировке PivotTable. |
DataOption2 | Необязательный | XlSortDataOption | Указывает, как сортировать текст в диапазоне, указанном в Key2; не применяется к сортировке PivotTable. |
DataOption3 | Необязательный | XlSortDataOption | Указывает, как сортировать текст в диапазоне, указанном в Key3; не применяется к сортировке PivotTable. |
Возвращаемое значение
Пример
В этом примере используется значение цвета ячейки в столбце A с помощью свойства ColorIndex, а затем используется это значение для сортировки диапазона по цвету.
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.
Та же функция, только с возможностью выбора столбца для сортировки двумерного массива:
Сортировка двумерного массива на листе Excel, по первым 3 столбцам по возрастанию
(создаётся временная книга из 1 листа для сортировки массива, после сортировки книга закрывается)
Ну и обычная пузырьковая сортировка одномерного массива
то же самое, но внутри макроса (arr - одномерный массив)
Комментарии
Игорь, предлагаю на Ваш суд такой вариант сортировки (через временный лист). При сортировке 400к+ текстовых значений время сортировки составляет несколько секунд (для меньших объемов возможно и не требуется такой подход). На вход подается двумерный массив с двумя столбцами, сортировка по первому столбцу, заголовки - опционально.
P.S. табуляция с отступами в коде пропали во время вставки кода на данной страничке. так что извиняйте за такое форматирование
Sub SortValue(ByRef rInitArr As Variant)
Dim sTMPSh$
sTMPSh = "Sortir"
On Error Resume Next
If Sheets(sTMPSh) Is Nothing Then
Sheets.Add After:=Sheets(Sheets.Count)
Sheets(Sheets.Count).Select
Sheets(Sheets.Count).Name = sTMPSh
Else
With Sheets(sTMPSh)
.Select
.Cells.ClearContents
End With
End If
On Error GoTo 0
Application.DisplayAlerts = False
Application.EnableEvents = False
With ActiveWorkbook.Worksheets(sTMPSh)
.Range(.Cells(2, 1), .Cells(UBound(rInitArr), 2)) = rInitArr
.Cells(1, 1) = "Сортируемый столбец"
.Cells(1, 2) = "Второй строки"
With .Sort
.SortFields.Clear
.SortFields.Add Key:=Cells(1, 1), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
.SetRange Range(Cells(1, 1), Cells(UBound(rInitArr), 2))
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
rInitArr = .Range(Cells(2, 1), Cells(UBound(rInitArr), 2))
.Delete
End With
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
При сортировке "скромного" массива на 400к+ строк через предложеннух функцию (первая по счету) комп ушел в "несознанку" на несколько десятков минут (терпение закончилось раньше). Если-то же самое выполнить средствами Worksheet (т.е. стандартный фильтр и в нем сортировка) - сортировка занимает около 2,5 минут (без учета выгрузки содержимого массива на временный лист (код примерно такой range(cells(1,1), cells(ubound(sourcearr), 2)) = sourcearr (цикл по строкам массива в данном случае не требуется)) и повторного считывания в массив).
В связи с чем вопрос: при каких размерах массивов есть смысл использовать тот или иной метод сортировки (безусловно, если есть какая то статистика)? Значения текстовые, массив двумерный.
Спасибо за труды!
nCount не нужен.
Вместо
ReDim tmpArr(UBound(SourceArr, 2)) As Variant
достаточно
dim vTmp as Variant
Обычно вы можете отсортировать или упорядочить порядок вкладок рабочего листа в Excel, перетащив вкладки листа на панель вкладок листа. Но для того, чтобы сделать это с несколькими листами, вы можете рассмотреть следующие хитрые способы быстрой сортировки листов в алфавитном / буквенно-цифровом порядке в большой книге.
Сортировка листов в алфавитном / буквенно-цифровом порядке с кодом VBA
В центре поддержки Майкрософт есть макрос для сортировки листов по альфа-каналу. Мы можем применить его, выполнив следующие шаги:
1. Удерживая нажатой ALT + F11 ключи, и он открывает Microsoft Visual Basic для приложений окно.
2. Нажмите на Вставить > Модуль, а затем вставьте следующий макрос в Окно модуля.
VBA: сортировка листов в алфавитном / буквенно-цифровом порядке
3. нажмите F5 ключ для запуска этого макроса. В следующем окне подсказки щелкните Да, все листы будут отсортированы по возрастанию в алфавитном порядке; и нажмите Нет, все листы будут отсортированы по убыванию в алфавитном порядке.
Сортировка листов в алфавитном / буквенно-цифровом порядке с помощью Kutools for Excel
Если вы не знакомы с макросами или предпочитаете другие способы, вы можете попробовать Kutools for Excel. Kutools for Excel's Сортировать листы инструмент может легко сортировать все листы.
Перед применением Kutools for Excel, Пожалуйста, сначала скачайте и установите.
1. Нажмите Kutools Plus > Рабочий лист > Сортировать листы. Смотрите скриншот:
2. В Сортировать листы В диалоговом окне выберите один тип сортировки, который вам нужен на правой панели, например Альфа-сортировка, Буквенно-цифровая сортировка, а затем нажмите OK кнопка. Смотрите скриншот:
Затем все листы сортируются на основе указанного типа сортировки. Смотрите скриншот:
Kutools for Excel's Сортировать листы инструмент может быстро переупорядочить все листы в активной книге. Он поддерживает несколько типов сортировки, в том числе Альфа-сортировка, Буквенно-цифровая сортировка, Цвет Сортировка и Обратный. Кроме того, вы также можете перемещать листы вверх / вниз и сбрасывать сортировку.
Если вы хотите получить 30-дневную бесплатную пробную версию этой утилиты, пожалуйста, нажмите, чтобы загрузить это, а затем перейдите к применению операции в соответствии с указанными выше шагами.
Операция сортировки упорядочивает элементы последовательности на основе одного или нескольких атрибутов. Первый критерий сортировки выполняет первичную сортировку элементов. Указав второй критерий поиска, можно сортировать элементы внутри каждой группы первичной сортировки.
На следующем рисунке показаны результаты операции сортировки в алфавитном порядке в последовательности символов.
Далее перечислены методы стандартных операторов запроса, которые выполняют сортировку данных.
Методы
Имя метода | Описание | Visual Basic Синтаксис выражения запроса | Дополнительные сведения |
---|---|---|---|
OrderBy | Сортировка значений в возрастающем порядке. | Order By | Enumerable.OrderBy |
Примеры синтаксиса выражений запросов
Примеры основной сортировки
Основная сортировка по возрастанию
В следующем примере показано использование предложения Order By в запросе LINQ для сортировки строк в массиве по длине строки в порядке возрастания.
Основная сортировка по убыванию
В следующем примере показано использование предложения Order By Descending в запросе LINQ для сортировки строк по их первой букве в порядке убывания.
Примеры дополнительной сортировки
Дополнительная сортировка по возрастанию
В следующем примере показано использование предложения Order By в запросе LINQ для выполнения основной и дополнительной сортировки строк в массиве. Строки сортируются основным образом по длине и дополнительно — по первой букве строки; в обоих случаях в возрастающем порядке.
Дополнительная сортировка по убыванию
В следующем примере показано использование предложения Order By Descending в запросе LINQ для выполнения основной сортировки по возрастанию и дополнительной сортировки по убыванию. Строки сортируются основным образом по длине и дополнительно — по первой букве строки.
Читайте также: