Сортировка данных в таблице на рабочем листе Excel средствами VBA. Sort и SortField, объекты и методы. Примеры сортировки данных в диапазоне.
Синтаксис сортировки
Синтаксис полного кода VBA Excel, применяемого для сортировки данных в таблицах и диапазонах:
With Expression.Sort .SortFields.Clear .SortFields.Add Key, SortOn, Order, DataOption .SetRange [Range] .Header = [xlGuess, xlYes, xlNo] .MatchCase = [True, False] .Orientation = [xlTopToBottom, xlLeftToRight] .Apply End With |
Синтаксис сокращенного кода VBA Excel, применяемого для сортировки данных с параметрами по умолчанию:
With Expression.Sort .SortFields.Clear .SortFields.Add Key .SetRange [Range] .Apply End With |
Expression – выражение, возвращающее объект Worksheet, например:
ActiveSheet Worksheets («Лист1») ActiveWorkbook.Worksheets («Лист1») Workbooks(«Книга1.xlsm»).Worksheets («Лист1») |
Расшифровка кода
1. Expression.Sort
– метод Sort объекта Worksheet возвращает объект Sort.
Объект Sort – это объект, представляющий сортировку диапазона данных.
2. .SortFields.Clear
– метод SortFields объекта Sort возвращает коллекцию объектов SortFields. Метод Clear объекта SortFields удаляет все существующие объекты SortField.
Объект SortField содержит все сведения о параметрах сортировки для заданного рабочего листа.
3. .SortFields.Add Key, SortOn, Order, DataOption
– метод Add объекта SortFields создает и возвращает новый экземпляр объекта SortField с заданными параметрами.
Параметры метода Add объекта SortFields:
Key
– обязательный параметр, который задает значение ключа для сортировки. Тип данных – Range. Обычно указывается первая ячейка столбца при сортировке по строкам или первая ячейка строки при сортировке по столбцам. Сортировка диапазона будет осуществлена по данным столбца (строки), первая ячейка которого указана в качестве ключа.
SortOn
– необязательный параметр, который задает критерий сортировки (по какому свойству ячеек производится сортировка).
Значения, которые может принимать SortOn:
Константа | Значение | Описание |
---|---|---|
SortOnValues | 0 | сортировка по значению (значение по умолчанию) |
SortOnCellColor | 1 | сортировка по цвету ячейки |
SortOnFontColor | 2 | сортировка по цвету шрифта |
SortOnIcon | 3 | сортировка по иконке* |
* Иконки (значки) могут быть заданы ячейкам при условном форматировании диапазона.
Order
– необязательный параметр, задающий порядок сортировки (по возрастанию или по убыванию).
Значения, которые может принимать Order:
Константа | Значение | Описание |
---|---|---|
xlAscending | 1 | сортировка по возрастанию (значение по умолчанию) |
xlDescending | 2 | сортировка по убыванию |
DataOption
– необязательный параметр, который задает способ сортировки текста.
Значения, которые может принимать DataOption:
Константа | Значение | Описание |
---|---|---|
xlSortNormal | 0 | числовые и текстовые данные сортируются отдельно (значение по умолчанию) |
xlSortTextAsNumbers | 1 | текстовые данные рассматриваются для сортировки как числовые |
4. .SetRange [Range]
– метод SetRange объекта Sort задает диапазон (таблицу), в котором выполняется сортировка.
5. .Header = [xlGuess, xlYes, xlNo]
– свойство Header объекта Sort указывает, является ли первая строка таблицы строкой заголовков (шапкой).
Значения, которые может принимать свойство Header:
Константа | Значение | Описание |
---|---|---|
xlGuess | 0 | Excel сам определяет, есть ли строка заголовков |
xlYes | 1 | строка заголовков есть, сортировка ее не затрагивает |
xlNo | 2 | строки заголовков нет (значение по умолчанию) |
6. .MatchCase = [True, False]
– свойство MatchCase объекта Sort указывает, как учитывать регистр при сортировке.
Значения, которые может принимать свойство MatchCase:
Константа | Значение | Описание |
---|---|---|
False | 0 | регистр не учитывается (значение по умолчанию) |
True | 1 | сортировка с учетом регистра |
7. .Orientation = [xlTopToBottom, xlLeftToRight]
– свойство Orientation объекта Sort задает ориентацию для сортировки.
Значения, которые может принимать свойство Orientation:
Константа | Значение | Описание |
---|---|---|
xlTopToBottom | 1 | сортировка по стокам (значение по умолчанию) |
xlLeftToRight | 2 | сортировка по столбцам |
8. .Apply
– метод Apply объекта Sort выполняет сортировку диапазона в соответствии с примененными параметрами.
Примеры сортировки
Таблица для примеров
Сортировка по одному столбцу
Краткая запись кода VBA Excel для сортировки диапазона по первому столбцу с параметрами по умолчанию:
Sub Primer1() With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Range(«A2») .SetRange Range(«A2:C7») .Apply End With End Sub |
Полная запись, но тоже с параметрами по умолчанию:
Sub Primer2() With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Range(«A2»), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange Range(«A2:C7») .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .Apply End With End Sub |
Результат сортировки:
Сортировка по двум столбцам
Код VBA Excel для сортировки исходной таблицы по первому и второму столбцам с параметрами по умолчанию:
Sub Primer3() With ActiveSheet.Sort .SortFields.Clear .SortFields.Add Key:=Range(«A2») .SortFields.Add Key:=Range(«B2») .SetRange Range(«A2:C7») .Apply End With End Sub |
Результат сортировки:
Применение сортировки ко второму столбцу (добавление еще одного объекта SortField) не нарушает сортировку первого – в первом столбце меняются местами только ячейки с одинаковыми значениями.
Содержание
- Range.Sort method (Excel)
- Syntax
- Parameters
- Return value
- Example
- Support and feedback
- Vba excel сортировка диапазона
- VBA сортировка диапазона
- VBA сортировка выделенного диапазона
- Сортировка диапазона данных
- Сортировка в плавающем диапазоне в VBA (Формулы/Formulas)
- сортировка выделенного диапазона макросом (Макросы/Sub)
- Сортировка в VBA. Вопрос
Range.Sort method (Excel)
Sorts a range of values.
Syntax
expression.Sort (Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom, MatchCase, Orientation, SortMethod, DataOption1, DataOption2, DataOption3)
expression A variable that represents a Range object.
Parameters
Name | Required/Optional | Data type | Description |
---|---|---|---|
Key1 | Optional | Variant | Specifies the first sort field, either as a range name (String) or Range object; determines the values to be sorted. |
Order1 | Optional | XlSortOrder | Determines the sort order for the values specified in Key1. |
Key2 | Optional | Variant | Second sort field; cannot be used when sorting a PivotTable. |
Type | Optional | Variant | Specifies which type of elements are to be sorted within a PivotTable. Specify xLSortLabels to sort by the labels targeted by the experession Range in the Row/Colum Labels areas of the PivotTable’s range, or xLSortValues when Key1 additionally targets a cell in the Values or Sub/Grand Totals areas using R1C1 notation. |
Order2 | Optional | XlSortOrder | Determines the sort order for the values specified in Key2. |
Key3 | Optional | Variant | Third sort field; cannot be used when sorting a PivotTable. |
Order3 | Optional | XlSortOrder | Determines the sort order for the values specified in Key3. |
Header | Optional | XlYesNoGuess | Specifies whether the first row contains header information. xlNo is the default value; specify xlGuess if you want Excel to attempt to determine the header. |
OrderCustom | Optional | Variant | Specifies a one-based integer offset into the list of custom sort orders. |
MatchCase | Optional | Variant | Set to True to perform a case-sensitive sort, False to perform a non-case-sensitive sort; cannot be used with PivotTables. |
Orientation | Optional | XlSortOrientation | Specifies if the sort should be by row (default) or column. Set xlSortColumns value to 1 to sort by column. Set xlSortRows value to 2 to sort by row (this is the default value). |
SortMethod | Optional | XlSortMethod | Specifies the sort method. |
DataOption1 | Optional | XlSortDataOption | Specifies how to sort text in the range specified in Key1; does not apply to PivotTable sorting. |
DataOption2 | Optional | XlSortDataOption | Specifies how to sort text in the range specified in Key2; does not apply to PivotTable sorting. |
DataOption3 | Optional | XlSortDataOption | Specifies how to sort text in the range specified in Key3; does not apply to PivotTable sorting. |
Return value
Example
This example gets the value of the color of a cell in column A by using the ColorIndex property, and then uses that value to sort the range by color.
Support and feedback
Have questions or feedback about Office VBA or this documentation? Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.
Источник
Vba excel сортировка диапазона
VBA сортировка диапазона
Смотрите такжеxlGuess. Let Microsoft
VBA нужного диапазона Key2:= _Set rn =Pelena кнопку. Я думаю, не хотите писать или «В» зависит, как вы меню Paste иCaption и IDИ при сортировке: Сделал так:Hamletiv y + 1: Mod 2 Next
atomreal Excel determine whether приходится отделять его
[b1], Order2:=xlAscending, Header:=xlYes, Selection: на этот раз свой сортировочный методПроблема в том, хотите преобразовать стандартную меню Paste Special для этих меню столбца А сSub D(): Поиск не помог ReDim Preserve arr2(1 With ActiveSheet.Sort .SortFields.Clear: Доброго времени суток. there’s a header, от заголовков пустой
OrderCustom:=1, MatchCase:= _rn.Columns(1).NumberFormat = «dd.mm.yyyy»
satrman вам идея должна и подменять им что в столбце сортировку, а раз на свой метод: такие: параметром Order1:=xlDescending всеSelection.SpecialCells(xlCellTypeBlanks, 1).FormulaR1C1 = (видимо потому что To j, 1 .SortFields.Add Key:=Range(«F2:F» &Помогите пожалуйста разобраться, and to determine строкой. Возникает проблемаFalse, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers,rn.Columns(1).Value = rn.Columns(1).Value, оформите код тегами быть понятна. штатный, то вам, «А» есть истинно так, то и FantomPaste. Т.е., когдаSort &Ascending 210
эти ячейки со «= R[-1]C»
я нуб в To y) For lr), SortOn:=xlSortOnValues, _ как отсортировать диапазон where it is, со сводными. Как _rn.Columns(2).NumberFormat = «hh:mm:ss» (кнопка #)gomboev видимо, остается копировать пустые ячейки (без собственно ее алгоритм. вы делаете Paste,Sort Des&cending 211 значением «» перескакиваютSelection.Copy макросах) z = 0 Order:=xlAscending, DataOption:=xlSortNormal .SortFields.Add с данными по if there is по уму этоDataOption2:=xlSortTextAsNumbersrn.Columns(2).Value = rn.Columns(2).Valuesatrman: VladConn формулы в значения формул и значений),VladConn то будет исполнятьсяАльтернативный (и более вверх, а числаSelection.PasteSpecial xlPasteValuesЕсть код: To j - Key:=Range(«A2:A» & lr), первому столбцу в one. делается?’. rn.Sort Key1:=[a1], Order1:=xlAscending,: Все, разобрался самогромное спасибо за и сортировать уже которые при сортировкеgomboev мой метод (процедура, простой) вариант такой: оказываются внизу (поApplication.CutCopyMode = False
SortOn:=xlSortOnValues, _ Order:=xlAscending, VBA так, чтоxlNo (default). (Theadmin’ СМЕЩАЕМСЯ НА Key2:= _ спасибо! идею! сделал! их, а потом всегда остаются внизу: VladConn, функция, макрос; назовите не пользоваться формулами убыванию)ActiveWorkbook.Worksheets(«пслн»).Sort.SortFields.ClearSelection.SpecialCells(xlCellTypeBlanks, 1).FormulaR1C1 = 1, y) = DataOption:=xlSortNormal .SetRange Range(«A1:F» бы сначала были entire range should: А какой код ОДНУ СТРОКУ ВНИЗ[b1], Order2:=xlAscending, Header:=xlYes,Flatcher
выложу файлик с программно заменять на
VBA сортировка выделенного диапазона
списка. А визвините за мою как хотите). Процедура внутри ячеек вообще.А вот если
ActiveWorkbook.Worksheets(«пслн»).Sort.SortFields.Add Key:=Range(«D:D»), _
«= R[-1]C»
cell(cl + z) & lr): .Header
чётные номера стеллажей,
be sorted). для сортировки вы
ДЛЯ ПРОДОЛЖЕНИЯ ПОИСКА
OrderCustom:=1, MatchCase:= _
: Подскажите пожалуйста как
примерчиком, может кому формулы. столбце «В», ячейкам тупость, но я такой подмены обязательно Вместо них можно сортировать столбец В,SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormalSelection.Copy Next z End = xlYes: .MatchCase
xlYes. (The entire
используете?
ActiveCell.Offset(1, 0).Select
False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers,
организовать сортировку выделенного
нужно будет
В столбец А
присваивается значение «»
не нашел ничего
должна сопровождаться своим
повесить кнопку или
то такого не
With ActiveWorkbook.Worksheets(«пслн»).Sort
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, Select Next cl = False .Orientation нечетные. Я не
range should notGuestLoop
_ диапазона макросом? В
satrman
в первые 5 при определенном условии
подходящего в теме
зеркальным собратом, который
меню, которые бы
происходит, и пустые
.SetRange Selection
SkipBlanks _
arr1 = Application.Transpose(arr1):
= xlTopToBottom: .SortMethod
стал всю таблицу
be sorted).
: К примеру Range(«A3»).CurrentRegion.Sort
End Sub
DataOption2:=xlSortTextAsNumbers
коде постарался максимально
: Вопрос от новичка.
строк вбейте 1,
(по средствам формул)
Сортировка диапазона данных
«Copy-Past» 8( восстанавливает исходную функциональность
программно вычисляли колонку ячейки остаются внизу,.Header = xlGuess:=False, Transpose:=False arr2 = Application.Transpose(arr2)
= xlPinYin: .Apply грузить, стеллажей околоGuest Key1:=Range(«A3»), Key2:=Range(«C3»), Key3:=Range(«E3»)nilem’. расписать все
Записал макрос по 5, 4, 3, и при сортировкеОтказаться от использования подмененного меню. Иначе
«А», очищая ее а ячейки с.MatchCase = FalseApplication.CutCopyMode = False Cells(UBound(arr1, 1) + End With Columns(6).ClearContents сотни. Система выгружает: Из-за незнания этого
A2 пустая: попробуйте так:’ СМЕЩАЕМСЯ НААпострофф сортировке диапазона. 2. В столбец по убыванию псевдо формул в ячейках
— в вашем строки, когда соответствующие числами сортируются наверху.Orientation = xlTopToBottomEnd Sub 2, 1).Resize(UBound(arr2, 1), End Sub продукты на запасе
метода пришлось по-домашнемуvikttur200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub СОРТИРОВКА() ОДНУ СТРОКУ ВНИЗ: С минимальным отклонениемВ макросе прописано: В в эти пустые ячейки перескакивают я не могу,
Excel все книги ячейки в колонке
по убыванию.SortMethod = xlPinYin
После выполнения диапазон UBound(arr2, 2)) =Nordheim в стеллажах поRange(«A1″).Activate: Павлов пришел :)Dim r As ДЛЯ ПРОДОЛЖЕНИЯ ПОИСКА от стиля и200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub RegAlfabet()
строки вставьте формулу вверх списка. Вот так как программка будут работать нестандартно. «B» истинно пусты.Получается, что значение.Apply остается выделенным. В
arr2 Cells(2, 1).Resize(UBound(arr1,
: Еще вариант! факту.Set CurrentReg =
Николай, здравствуйте! Почему
Range, adr$
ActiveCell.Offset(1, 0).Select если я угадал’ =IF(AХ>1,AХ,»»), где Х с этим-то и уже сильно разрослась, Вызов процедуры подмены После этого стандартная «» (пусто) задаваемоеEnd With код нужно добавить 1), UBound(arr1, 2))Sub Test() Dimя начал было, ActiveCell.CurrentRegion так редко с
Set r =
’ ЦИКЛ поля сортировки -
’ RegAlfabet Макрос — это число надо справиться. и ставить всё осуществляется при открытии сортировка будет по с помощью формулыEnd Sub сортировку выделенного диапазон = arr1 End i&, j&, cell а потом зашел
R = CurrentReg.Rows.Count нами?
Sheets(«Report»).UsedRange.Find(«Операция», LookIn:=xlValues, lookat:=xlWhole)Do200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub СОРТИРОВКА()’ от 1 доgomboev на уши и книги, откат подмены результатам выглядеть идентичной это совсем неРаботает :) по столбцу D Sub As Range Dim в тупик:C = CurrentReg.Columns.CountПользователь111If Not r’ ПРОДОЛЖАЕМ ПОИСКDim rn AsWith ActiveWorkbook.Worksheets(«REG and 5.: В файле примерчик переделывать желания нет, — перед ее для обоих столбцов. пусто, хоть иВопрос закрыт. (4-й столбец поGarni cl&, arr1(), arr2(),Sub sortstel() Dim
Set CurrentReg_1 =: Наверное,сортировка выделения диапазона Is Nothing Then ДАЛЕЕ Range AP»).SortПоставьте две кнопки: моей проблеммы. вообще. закрытием.VladConn выглядет также какgomboev счету) по убыванию: И еще вариант x%, y%, z%
stel As Range
Range(ActiveCell.Offset(1, 0), Cells(R, без заголовков единственныйadr = r.AddressCells.FindNext(After:=ActiveCell).SelectDim vAdr1 As.SetRange Range(«C5:O100»)Private Sub CommandButton1_Click()Помогите, пожалуйста!Дайте, пжалуйста, мнеТеперь касательно самогоgomboev совсем пустая ячейка: Умные люди, подскажите! (там числа). Верхняя
SAS888
i = Cells(Rows.Count, Set stel =
C)) вариантDo’ ЗАПИСЫВАЕМ АДРЕС String
.Header = xlYes Range(«B1:B5»).Copy Range(«B1:B5»).PasteSpecial Paste:=xlPasteValues,Димит ваш mail, я сортировочного метода (а: Supreme Being, (например, очищенная кнопкойApplication.Range(«A2:U101»).SortSpecial _ Key1:=ActiveSheet.Range(«A2»), строка диапазона не
: Можно и так: 1).End(xlUp).Row j = Sheet(1).Range(«A:A») For EachCurrentReg_1.Sort Key1:=Range(«A2») ‘Guest
With r.CurrentRegion НАЙДЕННОЙ ЯЧЕЙКИ ВDim vAdr2 As.MatchCase = False Operation:=xlNone, SkipBlanks _
: Можно заменить «»
отошлю небольшой примерчик то и методов).чесно говоря, я Delete). Order1:=xlAscendingВот эта строка заголовки и тоже
Private Sub CommandButton1_Click() Cells(1, Columns.Count).End(xlToLeft).Column Set cell In stel.Cells и т.д: Заело..Не могу придумать
With .Resize(.Rows.Count - ПЕРЕМЕННУЮ String.Orientation = xlTopToBottom :=False, Transpose:=False Dim
на «я». Если иллюстрирующий суть моей Как правило, кастомизированная не программист, яКак с этим сортирует у меня подлежат сортировке. Dim i As cell = Range(Cells(1, If cell.Value LikeСмешно, конечно! код выделения Current 1)vAdr2 = Selection.Address’ НА ВСЯКИЙ.SortMethod = xlPinYin i As Integer не нравится в
проблемы. сортировка исполняется в просто в качестве
справиться?
столбец, но неЗаписал макрос сортировки: Long, a(), q: 1), Cells(i, j)) «стеллаж **» ThenKuklP региона без верней.Sort Key1:=.Cells(1, 1),’ СРАВНИВАЕМ ПЕРЕМЕННЫЕ
СЛУЧАЙ АКТИВИРУЕМ ПЕРВУЮ.Apply For i = столбце буквы «я»И если вас
своих классах, экспонирующих хобби пишу программки
VladConn так как надо.Sub сортировка() Application.ScreenUpdating = False cell.Sort Key1:=cell(1), order1:=xlAscending,
s = cell.Value: Что смешного? Вы
строки Order1:=xlAscending, _ (ЕСЛИ СОВПАДАЮТ С ЯЧЕЙКУEnd With 1 To 5 , их можно не затруднит, то такие сортировочные процедуры, для себя и: gomboev,Она сортирует по
ActiveWorkbook.Worksheets(«пслн»).Sort.SortFields.Clear a = Range(«A2:A» Header:=xlYes For cl ‘стеллаж a = и сами моглиEducatedFoolKey2:=.Cells(1, 2), Order2:=xlAscending, АДРЕСОМ ПЕРВОЙ НАЙДЕННОЙCells(1, 1).SelectEnd Sub If Range(«B» &
скрыть условным форматированием
покажите на нём или методы. Инстанциирование окружающих, чтобы облегчитьПри сортировке только содержимому ячеек (т.е.ActiveWorkbook.Worksheets(«пслн»).Sort.SortFields.Add Key:=Range(«D57:D70»), _ & Cells(Rows.Count, 1).End(xlUp).Row).Value = j + cell.Offset(0, 1) ‘артикул бы нажатьF1 на: Какая разница, диапазон Header:=xlYes ЯЧЕЙКИ ОСТАНАВЛИВАЕМ ЦИКЛ)’ НАХОДИМ ПЕРВУЮНо мне нужно, CStr(i)).Value = «» или сортировкой по же как мне такого класса в свой труд и истинно пустые ячейки по формулам, которыеSortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal For i = 1 To cell.Count n = cell.Offset(0, слове Sort, как для сортировки включаетEnd WithIf Not vAdr1
ЯЧЕЙКУ СО СЛОВОМ чтобы правый нижний
Then Range(«B» & скрытому столбцу. См.
с ней справиться. виде объекта и жизнь. Поэтому, так
Сортировка в плавающем диапазоне в VBA (Формулы/Formulas)
всегда идут последними. там есть), аWith ActiveWorkbook.Worksheets(«пслн»).Sort 1 To UBound(a,
Step j Select
2) ‘ название
за Вас это
в себя строку
End With
<> vAdr2 Then ОПЕРАЦИЯ
край диапазона был
CStr(i)).ClearContents Next i
gomboev
Заранее благодарен!
позволяет использовать его
просто разобраться я
Для того, чтобы
надо чтобы сортировала
.SetRange Range(«A57:D70″) 1) q = Case Right(cell(cl).Value, 1) k = cell.Offset(0, любезно сделал EducatedFool. заголовка, или нет?Set r = Exit DoCells.Find(What:=»Операция», After:=ActiveCell, LookIn:=xlFormulas, меняющимся в зависимости End Sub Private: не катит, потомуДимит сортировочные методы. Т.е.
не могу. Если кастомизировать сортировку, нужно по значениям, которые.Header = xlGuess
Split(a(i, 1)) If Case 1, 3, 3) ‘ количество Да и приведенныйВ параметрах вызова
Sheets(«Report»).UsedRange.FindNext(r)’ ВЫДЕЛЯЕМ СТОЛБЕЦ LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext,
сортировка выделенного диапазона макросом (Макросы/Sub)
от значения в Sub CommandButton2_Click() Dim что при обратной: Если заменить в имя подменивающего макроса, не сложно, можно
писать свой класс эти формулы выдают.MatchCase = False Val(q(UBound(q))) Mod 2 5, 7, 9
ei = cell.Offset(0,
Вами код, это метода SORT можно
Loop While r.Address С ЗНАЧЕНИЯМИ ОТ
_ другой ячейке. Т.е.
i As Integer сортировке «я» находится столбце с формулами
или в данном
немного подробнее о и вызывать егоgomboev
.Orientation = xlTopToBottom = 0 Then x = x
4) ‘ единица
танцы с бубнами. указать, есть ли <> adr
НАЙДЕННОЙ ЯЧЕЙКИ ВНИЗ
MatchCase:=False, SearchFormat:=False).Select например если в For i =
в начале списка
относительные ссылки на
случае метода может
VladConn
сортировочный метод путем: вернее не так,
.SortMethod = xlPinYin
a(i, 1) =
+ 1: ReDim
измерения
Лучше так: у сортируемого диапазона
End IfRange(Selection, Selection.End(xlDown)).Select
’ ЗАПИСЫВАЕМ АДРЕС ячейке S1 стоит
1 To 5
gomboev
абсолютные, то это выглядеть так:: gomboev,
подмены имени макроса
всё напутал, ссори,
.Apply
«_» & a(i, Preserve arr1(1 To
Помогите пожалуйста, кто
Set tbl = заголовок:End Sub
’ И ВЛЕВО
НАЙДЕННОЙ ЯЧЕЙКИ В число 15, то Range(«B» & CStr(i)).Formula: отзовитесь, уважаемые программисты!
решит часть проблем.objMenuItem.OnAction = «МойСортировочныйОбъект.МойСортировочныйМетод»В этом же
для меню «Data/Sort. «. сами-то формулы остаютсяEnd With
1) Next [A2].Resize(UBound(a,
j, 1 To
знает.
[A1].CurrentRegion
параметр: HeaderFlatcher
Range(Selection, Selection.End(xlToLeft)).Select
ПЕРЕМЕННУЮ
диапазон должен быть
= «=IF(A» &
у меня, безКонечно самое удачное,
Этот класс, очевидно, VBA форуме вы
В своем чуть на месте
End Sub
1)).Value = a
x) For zІгор Гончаренкоtbl.Offset(1, 0).Resize(tbl.Rows.Count -
Specifies whether or
: Апострофф, спасибо работает))
’ ПРИМЕНЯЕМ СОРТИРОВКУ
vAdr1 = Selection.Address не «C5:O100», а
CStr(i) & 1,A»
вашей помощи, ну сортировать формулы с
может, если я найдете тему «Copy-Past»,
ли не последнемФормулы в столбце
Но как в
[A:E].Sort [A1], Header:=xlYes
= 0 To
: Sub SortStel() Dim 1, tbl.Columns.Count).Sort. и
not the firstFlatcher
Set rn =’ ВЫДЕЛЯЕМ СТОЛБЕЦ
«C5:O15». Т.е. должен
& CStr(i) &
никак не получается ссылкой на ячейку
не ошибаюсь, наследовать она на той
посте в этом
А берут значения
нем поставить выделенный [A:A].Replace «_», «»
j — 1 r&, lr& lr т.д. row contains headers.: nilem, спасибо! тоже
Сортировка в VBA. Вопрос
Selection С ЗНАЧЕНИЯМИ ОТ поменять номер строки «,»»»»)» Next i решить эту проблему в этой же интерфейс IComparable из же странице, что форуме я как
из столбца В диапазон, а не End SubПример во arr1(z + 1,
= Cells(Rows.Count, 1).End(xlUp).RowGuest Cannot be used
все заработало! насколько
rn.Columns(1).NumberFormat = «dd.mm.yyyy» НАЙДЕННОЙ ЯЧЕЙКИ ВНИЗ
(измениться диапазон) End SubНажмите первую 8(
строке (вместе). какого-нибудь родительского стандартного и эта тема. раз показал, как
(в нем просто фиксированный не понимаю. вложении. Откройте файл x) = cell(cl For r =
: Век живи,век учись-дураком when sorting PivotTable можно оказывается сокращатьrn.Columns(1).Value = rn.Columns(1).ValueRange(Selection, Selection.End(xlDown)).Select
Возможно как то кнопку, потом какдолжно же бытьgomboev класса, например, Collection
Там я привожу
это сделать (не числа или пусто)Guest и нажмите кнопку + z) Next 2 To lr
Источник
Группа: Авторы Ранг: Старожил Сообщений: 1612
Замечаний: |
OlegSmirnov, привет
вместо вот этой строки
[vba]
Код
Worksheets(«Поиск»).Range(«E6»).Resize(UBound(arr) + 1, 2) = arr
[/vba]
попробуйте так
[vba]
Код
With Worksheets(«Поиск»).Range(«E6»).Resize(UBound(arr) + 1, 2)
.Value = arr
.Sort Key1:=.Cells(1, 1), Order1:=xlDescending, Header:=xlNo
End With
[/vba]
Яндекс.Деньги 4100159601573
- Excel VBA Сортировка
Excel VBA Сортировка
Существуют разные способы сортировки данных в Microsoft Excel. Под вкладкой Excel Data находится значок сортировки, откуда вы можете быстро отсортировать данные и получить результаты. Почему тогда нужно писать сложный код VBA?
Вы должны помнить это каждый раз, коды VBA существуют для автоматизации вещей. Предположим, у вас есть данные, которые время от времени обновляются. Может быть, каждый день, еженедельно, ежемесячно и т. Д., И вам нужны ваши данные определенным образом. В таких случаях можно использовать функцию VBA SORT, которая станет удобным инструментом для вашей справки.
VBA имеет метод Range.Sort для сортировки данных. Где Range указывает диапазон ячеек, которые мы хотим отсортировать в порядке возрастания или убывания.
Синтаксис для Range.Sort приведен ниже:
Где,
- Ключ — столбец / диапазон, который нужно отсортировать. Ex. Если вы хотите отсортировать ячейки A1: A10, вы должны упомянуть Range (A1: A10)
- Порядок — это параметр, который позволяет сортировать данные в порядке возрастания или убывания.
- Заголовок — это параметр, который указывает, имеет ли ваш столбец / диапазон заголовки или нет.
Этих трех параметров достаточно для нашей работы. Однако есть некоторые другие параметры, такие как MatchCase, SortMethod и т. Д., Которые вы всегда можете изучить и посмотреть, как они работают.
Как использовать функцию сортировки Excel VBA?
Мы узнаем, как сортировку VBA можно использовать для сортировки столбца без заголовков, столбца с заголовками и нескольких столбцов с примерами в Excel.
Вы можете скачать этот шаблон VBA Sort Excel здесь — Шаблон VBA Sort Excel
Функция сортировки VBA — пример № 1
Сортировка одного столбца без заголовка
Предположим, у вас есть столбец с именами, как показано ниже, и все, что вам нужно, это отсортировать эти данные в алфавитном порядке в порядке возрастания или убывания.
Выполните следующие шаги, чтобы использовать функцию сортировки в VBA.
Шаг 1: Определите новую sup-процедуру в модуле и создайте макрос.
Код:
Sub SortEx1 () End Sub
Шаг 2: Используйте функцию Range.Sort для сортировки этого столбца в порядке возрастания.
Код:
Sub SortEx1 () Range ("A1", Range ("A1"). End (xlDown)). Sort End Sub
Здесь вы даете диапазон, начиная с ячейки A1 до последней использованной / непустой ячейки (см. Функцию .End (xlDown)) для функции Range.Sort.
Шаг 3: Теперь введите значения аргумента.
Код:
Sub SortEx1 () Range ("A1", Range ("A1"). End (xlDown)). Sort Key1: = Range ("A1"), Order1: = xlAscending, заголовок: = xlNo End Sub
Как мы уже обсуждали ранее, Key, Order и Header являются важными и необходимыми аргументами, которые необходимо предоставить. В качестве начального диапазона столбца мы указали Range («A1»), который нам нужно отсортировать. Порядок предоставляется в порядке возрастания, а заголовок — как нет (что означает, что столбец не имеет заголовка).
Этот код проверяет все непустые ячейки, начиная с A1, а затем сортирует их в порядке возрастания, начиная с ячейки A1.
Шаг 4: Запустите этот код, нажав F5 или кнопку Run вручную и посмотрите результат.
Если вы можете сравнить это с изображением в начале этого примера, вы увидите, что имена отсортированы в порядке возрастания.
Функция сортировки VBA — пример № 2
Сортировка одной колонки с заголовком
Предположим, у вас есть столбец с заголовком, как показано ниже. И вы хотели отсортировать этот столбец в порядке возрастания или убывания.
Выполните следующие шаги, чтобы использовать функцию сортировки в VBA.
Шаг 1: Определите новую подпроцедуру в новой модели для хранения макроса.
Код:
Sub SortEx2 () End Sub
Шаг 2: Используйте Sheets («Пример # 2»), чтобы указать, к какому листу относятся ваши данные.
Код:
Sub SortEx2 () Sheets ("Пример # 2") End Sub
Шаг 3: Используйте Range («A1»). Сортируйте перед приведенной выше строкой кода, чтобы сделать ее функцией сортировки.
Код:
Sub SortEx2 () Sheets ("Пример # 2"). Диапазон ("A1"). Sort End Sub
Шаг 4: Введите Key1 как Range («A1») для сортировки данных из ячейки A1, Order1, чтобы отсортировать данные в порядке возрастания или убывания, и Header как « Да», чтобы система знала, что первая строка является заголовком в вашем данные.
Код:
Sub SortEx2 () Sheets ("Пример # 2"). Range ("A1"). Sort Key1: = Range ("A1"), Order1: = xlAscending, Header: = xlYes End Sub
Шаг 5: Запустите этот код, нажав F5 или кнопку Run вручную и посмотрите результат.
Здесь данные из примера № 2 данной рабочей книги Excel сортируются в порядке возрастания, учитывая, что они имеют заголовок. Это означает, что при сортировке этих данных первая строка (которая содержит имя Emp ) игнорируется, поскольку она рассматривается как заголовок для этих данных в столбце A.
Вы также можете отсортировать те же данные в порядке убывания алфавитов. Все, что вам нужно сделать, это изменить порядок с возрастания на убывание.
Шаг 6: Измените order1 на нисходящий, чтобы отсортировать данные в порядке убывания.
Код:
Sub SortEx2 () Sheets ("Пример # 2"). Range ("A1"). Sort Key1: = Range ("A1"), Order1: = xlDescending, Header: = xlYes End Sub
Шаг 7: Запустите код и посмотрите вывод, как показано ниже.
Вы можете видеть, что данные отсортированы в порядке убывания.
Функция сортировки VBA — пример № 3
Сортировка нескольких столбцов с заголовками
До сих пор мы рассмотрели, как сортировать данные одного столбца в порядке возрастания или убывания (без заголовка и с заголовком). Что если у вас есть данные, которые нужно отсортировать по нескольким столбцам? Можно ли написать код для того же?
Ответ: «Да, конечно, это можно сделать!»
Предположим, у вас есть данные, указанные ниже:
Вы хотели отсортировать эти данные сначала по Emp Name, а затем по Location. Выполните следующие шаги, чтобы увидеть, как мы можем кодировать его в VBA.
Шаг 1: Определите новую подпроцедуру для добавления макроса в новый модуль.
Код:
Sub SortEx3 () End Sub
Шаг 2: Используйте оператор With… End With, чтобы добавить несколько условий сортировки в одном цикле.
Код:
Sub SortEx3 () с ActiveSheet.Sort End Sub
Шаг 3: Теперь используйте SortFields.Add, чтобы добавить несколько условий сортировки в одном листе.
Код:
Sub SortEx3 () с ActiveSheet.Sort .SortFields.Add Key: = Range ("A1"), Order: = xlAscending .SortFields.Add Key: = Range ("B1"), Order: = xlAscending End Sub
Шаг 4: Определите диапазон листов для сортировки и заголовок На следующем шаге.
Код:
Sub SortEx3 () с ActiveSheet.Sort .SortFields.Add Key: = Range ("A1"), Order: = xlAscending .SortFields.Add Key: = Range ("B1"), Order: = xlAscending .SetRange Range ("A1) : C13 ") .Header = xlYes End Sub
Шаг 5: Используйте .Apply, чтобы применить все это под оператором with и закрыть цикл, пишущий End With.
Код:
Sub SortEx3 () с ActiveSheet.Sort .SortFields.Add Key: = Range ("A1"), Order: = xlAscending .SortFields.Add Key: = Range ("B1"), Order: = xlAscending .SetRange Range ("A1) : C13 ") .Header = xlYes. Применить End End End Sub
Шаг 6: Запустите этот код, нажав F5 или кнопку Run вручную, и увидите результат.
В этом коде ActiveSheets.Sort помогает системе идентифицировать лист, по которому должны быть отсортированы данные. SortFields.Add позволяет добавлять два условия сортировки с их порядком (по возрастанию в обоих случаях). SetRange позволяет системе установить диапазон от A1 до C13. Вы также можете увеличить этот диапазон. Операторы Apply позволяют системе применять все изменения, сделанные в цикле With.
Наконец, вы получите данные, которые отсортированы по имени Emp сначала, а затем по местоположению.
То, что нужно запомнить
- Под сортировкой VBA вы можете создавать именованные диапазоны вместо ссылок на ячейки и использовать их. Ex. Если вы создали именованный диапазон для ячейки A1: A10 как «EmpRange», вы можете использовать его в Range.Sort, например Range («EmpRange»).
- Вы можете сортировать данные как по возрастанию, так и по убыванию, как в Excel.
- Если вы не уверены, есть ли у ваших данных заголовок или нет, вы можете использовать xlGuess в разделе заголовка, чтобы система могла угадать, является ли первая строка данных заголовком или нет.
Рекомендуемые статьи
Это было руководство по сортировке Excel VBA. Здесь мы обсудили VBA Sort и как использовать Excel VBA Sort Function вместе с практическими примерами и загружаемым шаблоном Excel. Вы также можете просмотреть наши другие предлагаемые статьи —
- Краткое руководство по Excel Сортировка по номеру
- Использование функции соответствия VBA
- Как отсортировать столбец в Excel?
- VBA Пока Loop | MS Excel
wfall 3 / 3 / 1 Регистрация: 01.05.2013 Сообщений: 123 |
||||
1 |
||||
Excel 17.07.2019, 10:37. Показов 3795. Ответов 18 Метки excel.range, vba excel (Все метки)
Ребят, короче я создал отчет в Excel. Мне нужно сделать сортировку по столбцу кол-ва выполненных заданий. По убыванию. Затем удалит сортировку и новую сортировку по ФИО. Отчет выполняется. Начал делать сортировку и не получается, код с сортировкой показывает ошибку (сортировку не понял как делать, нашел в интернете примеры. Ошибка: не допустимая ссылка, не поддерживает метод)
ВЕсь код лепить не стал. Там куча вкладок. Как сортировку сделать????
0 |
Programming Эксперт 94731 / 64177 / 26122 Регистрация: 12.04.2006 Сообщений: 116,782 |
17.07.2019, 10:37 |
18 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,999 |
|
17.07.2019, 12:51 |
2 |
wfall, но если будете делать сортировку вручную (сначала одну, потом другую) ведь проблем не должно возникать? Только включите сначала макрорекодер (Запись макроса), а потом Остановить запись. Получите работающий макрос. Можно его упростить и подправить. Или сравнить со своим.
2 |
3 / 3 / 1 Регистрация: 01.05.2013 Сообщений: 123 |
|
17.07.2019, 13:12 [ТС] |
3 |
а можете,пожалуйста, накидать примеры?
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,999 |
|
17.07.2019, 13:41 |
4 |
wfall, простите, а вы что вручную — на листе не можете отсортировать данные? Добавлено через 9 минут
0 |
3 / 3 / 1 Регистрация: 01.05.2013 Сообщений: 123 |
|
18.07.2019, 09:49 [ТС] |
5 |
у меня несовсем связано с макросом больше с visual basic sript. Сортировку я сделал, не получается фильтрация по столбцу Фио потом очистить фильтр и другой фильтр помтавить. помогите
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,999 |
|
18.07.2019, 10:43 |
6 |
wfall, ну я про это и писал, надо включить макрорекодер и потом делать вручную и получите макрос. Если сами не знаете этого, то пришлите не свой макрос, а файл с макросами
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,999 |
|
18.07.2019, 11:07 |
7 |
wfall, взял первый попавшийся свой файл, включил рекодер, проделал сортировку по первому столбцу от Я до А, остановил запись, получил первый макрос (Макрос1). Снова включил рекодер, сделал сортировку по второму столбцу, Остановил запись макроса, получил Макрос2. Можете запускать их по очереди и увидите результат.
0 |
Burk 1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,999 |
||||
18.07.2019, 11:34 |
8 |
|||
wfall, простите, недосмотрел, про фильтрацию пропустил, но надо сделать по той же методике с записью макроса Добавлено через 9 минут
Добавлено через 8 минут
1 |
wfall 3 / 3 / 1 Регистрация: 01.05.2013 Сообщений: 123 |
||||
21.07.2019, 17:04 [ТС] |
9 |
|||
Burk, фильтр получился таким образом Скрипт по которому высчитывается кол-ва закрытых и в работе и приостановленные:
Скрипт работает, филтр ставлю до скрипта но пренебрегает его. И считает всех
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,999 |
|
21.07.2019, 17:19 |
10 |
wfall, А вы в скрипте проверяете скрыта строка или нет оператором типа If Not Rows(Номер вашей строки).Hidden Then Считаем, а если нет, то нет?
1 |
wfall 3 / 3 / 1 Регистрация: 01.05.2013 Сообщений: 123 |
||||||||
22.07.2019, 21:18 [ТС] |
11 |
|||||||
Burk, я проверяю строку после фильтра:
Ошибка типа Type mismatch Добавлено через 42 минуты
Ошибка Type mismatch
0 |
1811 / 1134 / 345 Регистрация: 11.07.2014 Сообщений: 3,999 |
|
23.07.2019, 07:06 |
12 |
wfall, а какое значение вашей n при этом? Единственный вариант ошибки, что там находится не целое число, а какая-то фигня. Поставьте перед вашим If оператор Msgbox n и увидите. Или, когда вылетит ошибка, нажмите на Debug, а затем поставьте мышку на эту самую n и увидите её значение. И ваше условие написано неправильно. Вам надо, чтобы если строка не скрыта, то считать. я же писал, что надо так: If Not Rows(n).Hidden = True Then. Т.е. если строка не скрыта
0 |
0 / 0 / 0 Регистрация: 14.03.2023 Сообщений: 4 |
|
15.03.2023, 11:41 |
13 |
Доброго всем дня! Подскажите пожалуйста совершенно неопытному юзеру, как сделать следующее:
0 |
Модератор 11336 / 4655 / 748 Регистрация: 07.08.2010 Сообщений: 13,484 Записей в блоге: 4 |
|
15.03.2023, 12:07 |
14 |
если записываю макрорекордом, то сортирует всю таблицу ваших макросов не видим, они остались в вашей личной книге макросов
0 |
0 / 0 / 0 Регистрация: 14.03.2023 Сообщений: 4 |
|
15.03.2023, 12:28 |
15 |
Прошу прощения, он неправильно работал, поэтому не стал прикладывать. Сделал еще раз.
0 |
elixi 297 / 157 / 86 Регистрация: 01.04.2020 Сообщений: 436 |
||||
15.03.2023, 16:20 |
16 |
|||
Таблица большая, следует сортировать только выделенные строки SimmoS, для файла, кoтoрый вы прикрепили мoжнo например так: Кликните здесь для просмотра всего текста
0 |
0 / 0 / 0 Регистрация: 14.03.2023 Сообщений: 4 |
|
15.03.2023, 16:36 |
17 |
SimmoS, для файла, кoтoрый вы прикрепили мoжнo например так: Это просто шикарно работает. спасибо большое. Если я правильно понимаю, сортировка идет по цвету ячейки столбца А? раньше сортировал по цифровому значению цвета в столбце Е….теперь в нем не смысла?
0 |
297 / 157 / 86 Регистрация: 01.04.2020 Сообщений: 436 |
|
15.03.2023, 16:48 |
18 |
раньше сортировал по цифровому значению цвета в столбце Е….теперь в нем не смысла? этo тoлькo пример для тех четырех красoк, кoтoрые нахoдятся в вашем файле
0 |
0 / 0 / 0 Регистрация: 14.03.2023 Сообщений: 4 |
|
16.03.2023, 07:50 |
19 |
этo тoлькo пример для тех четырех красoк, кoтoрые нахoдятся в вашем файле Больше спасибо! Нет, использую только эти цвета.
0 |