Сортировка данных в таблице на рабочем листе 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) не нарушает сортировку первого – в первом столбце меняются местами только ячейки с одинаковыми значениями.
RUSBelorus Пользователь Сообщений: 110 |
#1 16.02.2018 01:14:52 Есть длинный макрос, хочу в него внедрить сортировку А-Я по первому столбцу с расширением диапазона (первые два столбца, больше нет…или по всем столбцам что есть или будут).
|
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
Плохое название темы: сортировка — это всего лишь один из инструментов Excel. Предложите новое — модераторы поменяют. |
RUSBelorus Пользователь Сообщений: 110 |
#3 16.02.2018 01:22:32
Честно говоря вообще «не в теме» что предложить |
||
автор темы не в теме Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
RUSBelorus
Лист создаётся программно (вашим длинным макросом), или вы сами создаёте новый лист, помещаете на него данные и затем обрабатываете макросом ? |
|
RUSBelorus Пользователь Сообщений: 110 |
#6 16.02.2018 01:40:04
Лист создается программно, вот полный код (в конце моя попытка добавки сортировки)
Изменено: RUSBelorus — 16.02.2018 01:43:06 |
||||
В принципе, если правильно понял, можно предложить такое название темы: Сортировка диапазона на активном листе макросом RUSBelorus собственно ответ в предложенном названии. Замените все явные указания листа на ActiveSheet и все. |
|
Можно попросить показать пример, я полный ноль. Знаний ноль, ковыряю долго, иногда (когда тупик) спрашиваю на Планете Изменено: RUSBelorus — 16.02.2018 02:21:04 |
|
Александр П. Пользователь Сообщений: 1147 |
#9 16.02.2018 02:00:10
|
||
RUSBelorus Пользователь Сообщений: 110 |
#10 16.02.2018 02:04:42 спасибо.
P/S/ В принципе код оригинала с помощью многих подпилен, есть комментарии. Можно кинуть в готовые решения для таких как я. Изменено: RUSBelorus — 16.02.2018 02:19:34 |
||
Юрий М Модератор Сообщений: 60570 Контакты см. в профиле |
ActiveWorkbook — избыточно. |
Александр П. Пользователь Сообщений: 1147 |
#12 16.02.2018 02:19:38 Юрий М
Согласен, но поленился убирать )))) RUSBelorus Я надеюсь вы понимаете, что в данном примере будет сортироваться диапазон «A2:B351», и если строк и столбцов будет больше — то сортировка их не захватит ? =)
Изменено: Александр П. — 16.02.2018 02:22:53 |
|
RUSBelorus Пользователь Сообщений: 110 |
#13 16.02.2018 02:22:09
Все верно, изменил на A2:B1000 и выложил код постом постом выше. |
||
сортировка выделенного диапазона макросом |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
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
Sub D() 1 arr2(z +
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
выложу файлик с программно заменять на
planetaexcel.ru
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,
(по средствам формул)
planetaexcel.ru
Сортировка диапазона данных
«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» & скрытому столбцу. См.
с ней справиться. виде объекта и жизнь. Поэтому, так
CyberForum.ru
Сортировка в плавающем диапазоне в 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,
excelworld.ru
сортировка выделенного диапазона макросом (Макросы/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, спасибо! тоже
excelworld.ru
Сортировка в 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
помрешь reports
код)))rn.Columns(2).NumberFormat = «hh:mm:ss»’ И ВЛЕВО использовать команду Indirect, обычно сортируйте столбцы какое-то решение!: сортируется диапазон, например
или Dictionary (из простой и подробный индивидуальную сортировку, а
и выдают либо: Попробуйте фиксированный диапазон «Выполнить».
z Case 0, Cells(r, 6) =Не всем же
значение — одно
Пользователь111rn.Columns(2).Value = rn.Columns(2).Value
Range(Selection, Selection.End(xlToLeft)).Select
но не пойму
А и В,VladConn «А2:B30» (по строкам),
Microsoft Scripting Runtime). пример подмены стандартного
подмену):
какое-то число, либо заменить на Selectionatomreal 2, 4, 6, Val(Right(Cells(r, 1), Len(Cells(r, KukIp быть из трёх:: При сортировке вrn.Sort Key1:=[a1], Order1:=xlAscending,’ ПРИМЕНЯЕМ СОРТИРОВКУ как указать…
потом нажмите вторую: Ну раз вы
относительно столбца «А» От вас полностью макроса (метода) для
http://www.relib.com/forums/Topic903735-11-1.aspx http://www.relib.com/forums/Topic903735-11-1.aspx «» (пусто)Hamletiv
: Спасибо огромное всем! 8 y =
planetaexcel.ru
1)) — 8))
- 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