Excel макрос сортировка диапазона

Сортировка данных в таблице на рабочем листе 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
Регистрация: 15.11.2014

#1

16.02.2018 01:14:52

Есть длинный макрос, хочу в него внедрить сортировку А-Я по первому столбцу с расширением диапазона (первые два столбца, больше нет…или по всем столбцам что есть или будут).
Запись макроса дала такой код, но в нем привязка к листу, а лист каждый раз создается заново. Как можно обыграть этот момент ( ‘Последнее действие. Сортировка А-Я)

Код
....длинный код
'Предпоследнее действие. Вывод только уникальных строк
    Columns("A:B").Select
    ActiveSheet.Range("$A$1:$B$1000").RemoveDuplicates Columns:=1, Header:=xlYes
    'Range("A1").Select
 'Последнее действие. Сортировка А-Я
    Columns("A:A").Select
    ActiveWorkbook.Worksheets("Лист5").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист5").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Лист5").Sort
        .SetRange Range("A2:B351")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    '------------
End Sub
 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

Плохое название темы: сортировка — это всего лишь один из инструментов Excel. Предложите новое — модераторы поменяют.

 

RUSBelorus

Пользователь

Сообщений: 110
Регистрация: 15.11.2014

#3

16.02.2018 01:22:32

Цитата
Юрий М написал:
Предложите новое — модераторы поменяют

Честно говоря вообще «не в теме» что предложить

 

автор темы не в теме
если тему закрыть все при своих  

Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!

 
RUSBelorus

Лист создаётся программно (вашим длинным макросом), или вы сами создаёте новый лист, помещаете на него данные и затем обрабатываете макросом ?

 

RUSBelorus

Пользователь

Сообщений: 110
Регистрация: 15.11.2014

#6

16.02.2018 01:40:04

Цитата
Александр П. написал:
Лист создаётся программно

Лист создается программно, вот полный код (в конце моя попытка добавки сортировки)

Код
'http://www.planetaexcel.ru/techniques/3/45/
Sub Парсинг_4_вывести_все_настройки()
If MsgBox("Укажите папку с настройками сайтов (папка Настройки) и будет создан лист со всеми уникальными настройками. Так можно понять есть уже настройка или ее нужно создать.", vbYesNo) <> vbYes Then Exit Sub
    Dim V As String
    Dim BrowseFolder As String
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выберите папку или диск"
        .Show
        On Error Resume Next
        Err.Clear
        V = .SelectedItems(1)
        If Err.Number <> 0 Then
            MsgBox "Вы ничего не выбрали!"
            Exit Sub
        End If
    End With
    BrowseFolder = CStr(V)
    
    'добавляем лист и выводим на него шапку таблицы
    ActiveWorkbook.Sheets.Add
    With Range("A1:E1")
        .Font.Bold = True
        .Font.Size = 12
    End With
    Range("A1").Value = "Имя файла"
    Range("B1").Value = "Путь"
    'Range("C1").Value = "Размер"
    'Range("D1").Value = "Дата создания"
    'Range("E1").Value = "Дата изменения"
    
    'вызываем процедуру вывода списка файлов
    'измените True на False, если не нужно выводить файлы из вложенных папок
    ListFilesInFolder BrowseFolder, True
End Sub
Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)

    Dim FSO As Object
    Dim SourceFolder As Object
    Dim SubFolder As Object
    Dim FileItem As Object
    Dim r As Long

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = FSO.getfolder(SourceFolderName)

    r = Range("A65536").End(xlUp).Row + 1   'находим первую пустую строку
    'выводим данные по файлу
    'For Each FileItem In SourceFolder.SubFolders   'вывести подпапки без файлов
    For Each FileItem In SourceFolder.Files
        Cells(r, 1).Formula = FileItem.Name
        'Cells(r, 2).Formula = FileItem.ParentFolder.Path 'путь без файла
        Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.ParentFolder.Path & """)"  'путь c гиперссылкой
        'Cells(r, 2).Formula = FileItem.Path       'путь без гиперссылки
        'Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.Path & """)"  'путь c гиперссылкой
        'Cells(r, 3).Formula = FileItem.Size
        'Cells(r, 4).Formula = FileItem.DateCreated
        'Cells(r, 5).Formula = FileItem.DateLastModified
        r = r + 1
        x = SourceFolder.Path
        On Error Resume Next
    Next FileItem
    
    'вызываем процедуру повторно для каждой вложенной папки
    If IncludeSubfolders Then
        For Each SubFolder In SourceFolder.SubFolders
            ListFilesInFolder SubFolder.Path, True
        Next SubFolder
    End If

    Columns("A:E").AutoFit

    Set FileItem = Nothing
    Set SourceFolder = Nothing
    Set FSO = Nothing
'вывод только уникальных строк
    Columns("A:B").Select
    ActiveSheet.Range("$A$1:$B$1000").RemoveDuplicates Columns:=1, Header:=xlYes
    'Range("A1").Select
    'Сртировка А-Я (начало)
    Columns("A:A").Select
    ActiveWorkbook.Worksheets("Лист5").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист5").Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Лист5").Sort
        .SetRange Range("A2:B351")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    'Сртировка А-Я (конец)
End Sub

Изменено: RUSBelorus16.02.2018 01:43:06

 

В принципе, если правильно понял, можно предложить такое название темы: Сортировка диапазона на активном листе макросом

RUSBelorus

собственно ответ в предложенном названии. Замените все явные указания листа на ActiveSheet и все.

 

Можно попросить показать пример, я полный ноль. Знаний ноль, ковыряю долго, иногда (когда тупик) спрашиваю на Планете

Изменено: RUSBelorus16.02.2018 02:21:04

 

Александр П.

Пользователь

Сообщений: 1147
Регистрация: 16.03.2016

#9

16.02.2018 02:00:10

Код
....длинный код
'Предпоследнее действие. Вывод только уникальных строк
 'Последнее действие. Сортировка А-Я

    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("A2:B351")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    '------------
End Sub
 

RUSBelorus

Пользователь

Сообщений: 110
Регистрация: 15.11.2014

#10

16.02.2018 02:04:42

спасибо.
Вот полный код. Суть его: вывод всех файлов в подпапках (+только уникальные, + сортировка), + много комментариев по своим настройкам

Код
'http://www.planetaexcel.ru/techniques/3/45/
Sub Парсинг_4_вывести_все_настройки()
If MsgBox("Укажите папку с настройками сайтов (папка Настройки) и будет создан лист со всеми уникальными настройками. Так можно понять есть уже настройка или ее нужно создать.", vbYesNo) <> vbYes Then Exit Sub
    Dim V As String
    Dim BrowseFolder As String
    
    With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выберите папку или диск"
        .Show
        On Error Resume Next
        Err.Clear
        V = .SelectedItems(1)
        If Err.Number <> 0 Then
            MsgBox "Вы ничего не выбрали!"
            Exit Sub
        End If
    End With
    BrowseFolder = CStr(V)
    
    'добавляем лист и выводим на него шапку таблицы
    ActiveWorkbook.Sheets.Add
    With Range("A1:E1")
        .Font.Bold = True
        .Font.Size = 12
    End With
    Range("A1").Value = "Имя файла"
    Range("B1").Value = "Путь"
    'Range("C1").Value = "Размер"
    'Range("D1").Value = "Дата создания"
    'Range("E1").Value = "Дата изменения"
    
    'вызываем процедуру вывода списка файлов
    'измените True на False, если не нужно выводить файлы из вложенных папок
    ListFilesInFolder BrowseFolder, True
End Sub
Private Sub ListFilesInFolder(ByVal SourceFolderName As String, ByVal IncludeSubfolders As Boolean)

    Dim FSO As Object
    Dim SourceFolder As Object
    Dim SubFolder As Object
    Dim FileItem As Object
    Dim r As Long

    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = FSO.getfolder(SourceFolderName)

    r = Range("A65536").End(xlUp).Row + 1   'находим первую пустую строку
    'выводим данные по файлу
    'For Each FileItem In SourceFolder.SubFolders   'вывести подпапки без файлов
    For Each FileItem In SourceFolder.Files
        Cells(r, 1).Formula = FileItem.Name
        'Cells(r, 2).Formula = FileItem.ParentFolder.Path 'путь без файла
        Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.ParentFolder.Path & """)"  'путь c гиперссылкой
        'Cells(r, 2).Formula = FileItem.Path       'путь без гиперссылки
        'Cells(r, 2).Formula = "=HYPERLINK(""" & FileItem.Path & """)"  'путь c гиперссылкой
        'Cells(r, 3).Formula = FileItem.Size
        'Cells(r, 4).Formula = FileItem.DateCreated
        'Cells(r, 5).Formula = FileItem.DateLastModified
        r = r + 1
        x = SourceFolder.Path
        On Error Resume Next
    Next FileItem
    
    'вызываем процедуру повторно для каждой вложенной папки
    If IncludeSubfolders Then
        For Each SubFolder In SourceFolder.SubFolders
            ListFilesInFolder SubFolder.Path, True
        Next SubFolder
    End If

    Columns("A:E").AutoFit

    Set FileItem = Nothing
    Set SourceFolder = Nothing
    Set FSO = Nothing
'вывод только уникальных строк
    Columns("A:B").Select
    ActiveSheet.Range("$A$1:$B$1000").RemoveDuplicates Columns:=1, Header:=xlYes
    'Range("A1").Select
    'Сртировка А-Я (начало)
 'Последнее действие. Сортировка А-Я
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.Sort.SortFields.Add Key:=Range("A1"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet.Sort
        .SetRange Range("A2:B1000")
        .Header = xlNo
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
        Range("A1").Select
    End With
 'Последнее действие. Сортировка А-Я. Конец
End Sub

P/S/ В принципе код оригинала с помощью многих подпилен, есть комментарии. Можно кинуть в готовые решения для таких как я.

Изменено: RUSBelorus16.02.2018 02:19:34

 

Юрий М

Модератор

Сообщений: 60570
Регистрация: 14.09.2012

Контакты см. в профиле

ActiveWorkbook — избыточно.

 

Александр П.

Пользователь

Сообщений: 1147
Регистрация: 16.03.2016

#12

16.02.2018 02:19:38

Юрий М

Согласен, но поленился убирать ))))

RUSBelorus

Я надеюсь вы понимаете, что в данном примере будет сортироваться диапазон «A2:B351», и если строк и столбцов будет больше — то сортировка их не захватит ? =)
офф топ

Скрытый текст

Изменено: Александр П.16.02.2018 02:22:53

 

RUSBelorus

Пользователь

Сообщений: 110
Регистрация: 15.11.2014

#13

16.02.2018 02:22:09

Цитата
Александр П. написал:
диапазон «A2:B351»,

Все верно, изменил на A2:B1000 и выложил код постом постом выше.

сортировка выделенного диапазона макросом

Flatcher

Дата: Воскресенье, 21.02.2016, 20:06 |
Сообщение № 1

Группа: Проверенные

Ранг: Участник

Сообщений: 92


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Подскажите пожалуйста как организовать сортировку выделенного диапазона макросом? В коде постарался максимально расписать все

К сообщению приложен файл:

report.xls
(49.5 Kb)

 

Ответить

Апострофф

Дата: Воскресенье, 21.02.2016, 20:55 |
Сообщение № 2

Группа: Проверенные

Ранг: Обитатель

Сообщений: 416


Репутация:

117

±

Замечаний:
0% ±


Excel 1997

С минимальным отклонением от стиля и если я угадал поля сортировки —

[vba]

Код

Sub СОРТИРОВКА()
Dim rn As Range
Dim vAdr1 As String
Dim vAdr2 As String
‘ НА ВСЯКИЙ СЛУЧАЙ АКТИВИРУЕМ ПЕРВУЮ ЯЧЕЙКУ
Cells(1, 1).Select
‘ НАХОДИМ ПЕРВУЮ ЯЧЕЙКУ СО СЛОВОМ ОПЕРАЦИЯ
Cells.Find(What:=»Операция», After:=ActiveCell, LookIn:=xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Select
‘ ЗАПИСЫВАЕМ АДРЕС НАЙДЕННОЙ ЯЧЕЙКИ В ПЕРЕМЕННУЮ
vAdr1 = Selection.Address
‘ ВЫДЕЛЯЕМ СТОЛБЕЦ С ЗНАЧЕНИЯМИ ОТ НАЙДЕННОЙ ЯЧЕЙКИ ВНИЗ
Range(Selection, Selection.End(xlDown)).Select
‘ И ВЛЕВО
Range(Selection, Selection.End(xlToLeft)).Select
‘ ПРИМЕНЯЕМ СОРТИРОВКУ
Set rn = Selection
rn.Columns(1).NumberFormat = «dd.mm.yyyy»
rn.Columns(1).Value = rn.Columns(1).Value
rn.Columns(2).NumberFormat = «hh:mm:ss»
rn.Columns(2).Value = rn.Columns(2).Value
    rn.Sort Key1:=[a1], Order1:=xlAscending, Key2:= _
        [b1], Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
        DataOption2:=xlSortTextAsNumbers

‘??????

‘ СМЕЩАЕМСЯ НА ОДНУ СТРОКУ ВНИЗ ДЛЯ ПРОДОЛЖЕНИЯ ПОИСКА
ActiveCell.Offset(1, 0).Select
‘ ЦИКЛ
Do
‘ ПРОДОЛЖАЕМ ПОИСК ДАЛЕЕ
Cells.FindNext(After:=ActiveCell).Select
‘ ЗАПИСЫВАЕМ АДРЕС НАЙДЕННОЙ ЯЧЕЙКИ В ПЕРЕМЕННУЮ
vAdr2 = Selection.Address
‘ СРАВНИВАЕМ ПЕРЕМЕННЫЕ (ЕСЛИ СОВПАДАЮТ С АДРЕСОМ ПЕРВОЙ НАЙДЕННОЙ ЯЧЕЙКИ ОСТАНАВЛИВАЕМ ЦИКЛ)
If Not vAdr1 <> vAdr2 Then Exit Do
‘ ВЫДЕЛЯЕМ СТОЛБЕЦ С ЗНАЧЕНИЯМИ ОТ НАЙДЕННОЙ ЯЧЕЙКИ ВНИЗ
Range(Selection, Selection.End(xlDown)).Select
‘ И ВЛЕВО
Range(Selection, Selection.End(xlToLeft)).Select
‘ ПРИМЕНЯЕМ СОРТИРОВКУ
Set rn = Selection
rn.Columns(1).NumberFormat = «dd.mm.yyyy»
rn.Columns(1).Value = rn.Columns(1).Value
rn.Columns(2).NumberFormat = «hh:mm:ss»
rn.Columns(2).Value = rn.Columns(2).Value
    rn.Sort Key1:=[a1], Order1:=xlAscending, Key2:= _
        [b1], Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:= _
        False, Orientation:=xlTopToBottom, DataOption1:=xlSortTextAsNumbers, _
        DataOption2:=xlSortTextAsNumbers

‘??????

‘ СМЕЩАЕМСЯ НА ОДНУ СТРОКУ ВНИЗ ДЛЯ ПРОДОЛЖЕНИЯ ПОИСКА
ActiveCell.Offset(1, 0).Select
Loop
End Sub

[/vba]

 

Ответить

nilem

Дата: Воскресенье, 21.02.2016, 20:55 |
Сообщение № 3

Группа: Авторы

Ранг: Старожил

Сообщений: 1612


Репутация:

563

±

Замечаний:
0% ±


Excel 2013, 2016

попробуйте так:
[vba]

Код

Sub СОРТИРОВКА()
Dim r As Range, adr$
Set r = Sheets(«Report»).UsedRange.Find(«Операция», LookIn:=xlValues, lookat:=xlWhole)
If Not r Is Nothing Then
    adr = r.Address
    Do
        With r.CurrentRegion
            With .Resize(.Rows.Count — 1)
                .Sort Key1:=.Cells(1, 1), Order1:=xlAscending, _
                      Key2:=.Cells(1, 2), Order2:=xlAscending, Header:=xlYes
            End With
        End With
        Set r = Sheets(«Report»).UsedRange.FindNext(r)
    Loop While r.Address <> adr
End If
End Sub

[/vba]


Яндекс.Деньги 4100159601573

 

Ответить

Flatcher

Дата: Воскресенье, 21.02.2016, 21:11 |
Сообщение № 4

Группа: Проверенные

Ранг: Участник

Сообщений: 92


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

Апострофф, спасибо работает))

 

Ответить

Flatcher

Дата: Воскресенье, 21.02.2016, 21:12 |
Сообщение № 5

Группа: Проверенные

Ранг: Участник

Сообщений: 92


Репутация:

1

±

Замечаний:
0% ±


Excel 2010

nilem, спасибо! тоже все заработало! насколько можно оказывается сокращать код)))

 

Ответить

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:=xlSortTextAsNumbers​rn.Columns(2).Value = rn.Columns(2).Value​satrman​: 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). (The​admin​’ СМЕЩАЕМСЯ НА​ Key2:= _​ спасибо!​ идею! сделал!​ их, а потом​ всегда остаются внизу​: VladConn,​ функция, макрос; назовите​ не пользоваться формулами​ убыванию)​ActiveWorkbook.Worksheets(«пслн»).Sort.SortFields.Clear​Selection.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:=xlSortNormal​Selection.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 not​​Guest​Loop​

​ _​​ диапазона макросом? В​

​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 = False​Application.CutCopyMode = False​ Cells(UBound(arr1, 1) +​ End With Columns(6).ClearContents​ сотни. Система выгружает​: Из-за незнания этого​
​A2 пустая​: попробуйте так:​’ СМЕЩАЕМСЯ НА​Апострофф​ сортировке диапазона.​ 2. В столбец​ по убыванию псевдо​ формул в ячейках​
​ — в вашем​ строки, когда соответствующие​ числами сортируются наверху​.Orientation = xlTopToBottom​End Sub​ 2, 1).Resize(UBound(arr2, 1),​ End Sub​ продукты на запасе​
​ метода пришлось по-домашнему​vikttur​200?’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)​Do​200?’200px’:»+(this.scrollHeight+5)+’px’);»>Sub СОРТИРОВКА()​’​ от 1 до​gomboev​ на уши и​ книги, откат подмены​ результатам выглядеть идентичной​ это совсем не​Работает :)​ по столбцу D​ Sub​ As Range Dim​ в тупик:​C = CurrentReg.Columns.Count​Пользователь111​If Not r​’ ПРОДОЛЖАЕМ ПОИСК​Dim rn As​With 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.Address​Cells.FindNext(After:=ActiveCell).Select​Dim 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 Each​CurrentReg_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))​ «стеллаж **» Then​KuklP​ региона без верней​.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 =​ и сами могли​EducatedFool​Key2:=.Cells(1, 2), Order2:=xlAscending,​ АДРЕСОМ ПЕРВОЙ НАЙДЕННОЙ​Cells(1, 1).Select​End 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 With​If 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 Do​Cells.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 If​Range(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​
​параметр: Header​Flatcher​
​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 first​Flatcher​
​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).Row​​Guest​ 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).Value​Range(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) =​Не всем же​
​значение — одно​
​Пользователь111​rn.Columns(2).Value = rn.Columns(2).Value​
​Range(Selection, Selection.End(xlToLeft)).Select​
​ но не пойму​
​ А и В,​VladConn​ «А2:B30» (по строкам),​
​ Microsoft Scripting Runtime).​ пример подмены стандартного​

​ подмену):​

​ какое-то число, либо​​ заменить на Selection​atomreal​ 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. Вы также можете просмотреть наши другие предлагаемые статьи —

  1. Краткое руководство по Excel Сортировка по номеру
  2. Использование функции соответствия VBA
  3. Как отсортировать столбец в Excel?
  4. VBA Пока Loop | MS Excel

Понравилась статья? Поделить с друзьями:
  • Excel макрос создать новую книгу excel
  • Excel макрос создать лист с именем
  • Excel макрос создать гиперссылку
  • Excel макрос создание сводной таблицы в excel
  • Excel макрос снять выделение