Сортировка умной таблицы vba excel

 

QwertyBoss

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

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

#1

28.03.2017 06:33:12

Добрый день! Нужен совет. Есть множество листов, на каждом есть умная таблица (именованый диапазон). Сделал код который должен сортировать таблицу в зависимости на каком листе находится и определяя название диапазона при помощи переменной, но … не выходит каменный цветок. Ругается при сортировке, в чём ошибка? Подскажите

Код
Sub Макрос4()
    Dim iSource As ListObject
    Set iSource = ActiveCell.ListObject
    If iSource Is Nothing Then Exit Sub

    ActiveWorkbook.ActiveSheet.ListObjects(iSource).Sort.SortFields.Clear
    ActiveWorkbook.ActiveSheet.ListObjects(iSource).Sort.SortFields.Add _
        Key:=Range("A:A"), SortOn:=xlSortOnValues, Order:= _
        xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.ActiveSheet.ListObjects(iSource).Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Прикрепленные файлы

  • =0_D-@C-_06.01.2017.xlsx (16.5 КБ)

 

RAN

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

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

#2

28.03.2017 08:40:39

Код
Sub Макрос1()
    With ActiveWorkbook.Worksheets("Лист2").ListObjects("Таблица_main1.DB3")
        .Sort.SortFields.Clear
        .Sort.SortFields.Add Key:=.ListColumns("date_priem").Range, SortOn _
        :=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .Sort.Header = xlYes
        .Sort.MatchCase = False
        .Sort.Orientation = xlTopToBottom
        .Sort.SortMethod = xlPinYin
        .Sort.Apply
    End With
End Sub
 

QwertyBoss

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

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

#3

28.03.2017 08:56:21

В этом вся суть, ув. RAN, нет у меня возможности прописать для каждой таблицы (их порядка 50 шт) свой макрос. Вот я и пробовал через переменную

Код
Dim iSource As ListObject    
Set iSource = ActiveCell.ListObject

С одинокой таблицей у меня проблем нет (спасибо макрорекордеру :) ), а вот что бы с несколькими десятками, да одним макросом…

 

RAN

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

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

Макрос из поста #2 преобразуется в макрос, обрабатывающий ВСЕ таблицы в книге, примерно за 5 минут.  ;)

 

Эээ…не понял, а поподробнее…

 

RAN

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

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

#6

28.03.2017 09:24:23

Код
Sub qq()
    Dim sh As Worksheet, ListObj As Object, ListCol As Object, sOrder As Long
    sOrder = 1
    For Each sh In Worksheets
        For Each ListObj In sh.ListObjects
            Set ListCol = ListObj.ListColumns(1)
            Call ww(ListObj, ListCol, sOrder)
        Next
    Next
End Sub
Sub ww(ListObj As Object, ListCol As Object, sOrder As Long)
    With ListObj.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ListCol.Range, SortOn _
        :=xlSortOnValues, Order:=sOrder, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub
 

QwertyBoss

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

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

#7

28.03.2017 09:50:30

…а для активного (выбранного) листа?..
кажется так

Код
Sub qq()
    Dim sh As Worksheet, ListObj As Object, ListCol As Object, sOrder As Long
    Set ListObj = ActiveCell.ListObject
    sOrder = 1
'    For Each sh In Worksheets
'        For Each ListObj In sh.ListObjects
            Set ListCol = ListObj.ListColumns(1)
            Call ww(ListObj, ListCol, sOrder)
'        Next
'    Next
End Sub
Sub ww(ListObj As Object, ListCol As Object, sOrder As Long)
    With ListObj.Sort
        .SortFields.Clear
        .SortFields.Add Key:=ListCol.Range, SortOn _
        :=xlSortOnValues, Order:=sOrder, DataOption:=xlSortNormal
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Спс. Андрей Николаевич…получилось!

Изменено: QwertyBoss28.03.2017 10:01:13

lapin9126

2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

1

06.01.2017, 11:54. Показов 7805. Ответов 3

Метки нет (Все метки)


Студворк — интернет-сервис помощи студентам

Здравствуйте. Проблема заключается в том, что если указать конкретное имя таблицы, то сортировка выполняется, а если вводить имя листа таблицы с помощью макроса, то сортировка не проходит. Помогите пожалуйста.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub Сортировка_2()
ActiveWorkbook.CheckCompatibility = False ' отменяем проверку совместимости
'----------------------------------------------------------------------------
    Dim sName, obj As String
    sName = ActiveWorkbook.ActiveSheet.Name ' имя активного листа
'----------------------------------------------------------------------------
    For Each obj In sName.ListObjects ' получение имя активной таблицы
        If obj.Active Then nameTbl = obj.Name: Exit For
    Next obj
    Debug.Print nameTbl
'----------------------------------------------------------------------------
ActiveWorkbook.sName.ListObjects(obj).Sort. _
        SortFields.Clear
    ActiveWorkbook.sName.ListObjects(obj).Sort. _
        SortFields.Add Key:=Range("obj[Group]"), SortOn:= _
        xlSortOnValues, Order:=xlAscending, CustomOrder:= _
        "КУПЛЮ :,ПРОДАМ :,АРЕНДА :,НЕДВИЖИМОСТЬ :,ТРАНСПОРТ :,УСЛУГИ :,РАБОТА :,РАЗНОЕ :" _
        , DataOption:=xlSortNormal
    With ActiveWorkbook.sName.ListObjects.obj.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

Вложения

Тип файла: xlsx на_форум_06.01.2017.xlsx (16.5 Кб, 25 просмотров)



0



2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

06.01.2017, 20:11

 [ТС]

2

Нашёл решение, можно закрыть



0



pashulka

4131 / 2235 / 940

Регистрация: 01.12.2010

Сообщений: 4,624

06.01.2017, 22:16

3

Не будем эгоистами и откроем тайну — можно так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
Private Sub Test()
    Dim iSource As ListObject
    Set iSource = ActiveCell.ListObject
    If iSource Is Nothing Then Exit Sub
    
    With iSource.Sort
         .SortFields.Clear
         'Здесь можно установить необходимые значения свойств
         ...
    End With
End Sub

А если в рабочем листе всего одна умная таблица, то ещё проще :

Visual Basic
1
2
3
4
5
6
Private Sub Test()
    With ActiveSheet.ListObjects(1).Sort
         .SortFields.Clear
         ...
    End With
End Sub



0



lapin9126

2 / 2 / 0

Регистрация: 19.10.2015

Сообщений: 176

06.01.2017, 22:26

 [ТС]

4

Собственно сам макрос.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Sub Сортировка_2()
With ActiveSheet.ListObjects(1)
    .Sort.SortFields.Clear
    .Sort.SortFields.Add Key:=.Range.Columns(9), SortOn:= _
                        xlSortOnValues, Order:=xlAscending, CustomOrder:= _
                        "КУПЛЮ :,ПРОДАМ :,АРЕНДА :,НЕДВИЖИМОСТЬ :,ТРАНСПОРТ :,УСЛУГИ :,РАБОТА :,РАЗНОЕ :" _
                        , DataOption:=xlSortNormal
    With .Sort
        .Header = xlYes
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End With
End Sub

Да, ваш вариант pashulka подходит на 100%. Можно считать как лучший ответ.



0



Сортировка данных в таблице на рабочем листе 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) не нарушает сортировку первого – в первом столбце меняются местами только ячейки с одинаковыми значениями.

Сортировка в «умной» таблице с подтягивающимися данными

Maryasha

Дата: Четверг, 27.07.2017, 18:05 |
Сообщение № 1

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

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

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


Excel 2013

Всем добрый день!
Подскажите, как в данном случае сделать правильную сортировку по сумме? Если в таком виде сделать сортировку, то данные с левых столбцов остаются на местах, тк. подтягиваются с другого места

 

Ответить

InExSu

Дата: Четверг, 27.07.2017, 22:14 |
Сообщение № 2

Группа: Друзья

Ранг: Ветеран

Сообщений: 646


Репутация:

96

±

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


Excel 2010

На лист «БД» добавьте столбец Сумма (заполните соответственно) , справа от столбца Организация. И вся мощь Excel (сводные, для начала) будет в Вашем распоряжении! hands


Разработчик Битрикс24 php, Google Apps Script, VBA Excel

 

Ответить

Maryasha

Дата: Пятница, 28.07.2017, 09:12 |
Сообщение № 3

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

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

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


Excel 2013

InExSu, а если у меня в исходном файле перечень организации и сумма с разных таблиц подтягиваются?

 

Ответить

buchlotnik

Дата: Пятница, 28.07.2017, 09:24 |
Сообщение № 4

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

Цитата

перечень организации и сумма с разных таблиц подтягиваются

ну они, как минимум, по какому-то общему признаку должны подтягиваться — в файле этого нет; покажите из какой таблицы тянутся суммы

 

Ответить

Maryasha

Дата: Пятница, 28.07.2017, 09:46 |
Сообщение № 5

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

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

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


Excel 2013

buchlotnik, например, как здесь, делаем отчет по Холдингу №1. Единственный общий признак — наименование конкретной организации

Сообщение отредактировал MaryashaПятница, 28.07.2017, 09:47

 

Ответить

buchlotnik

Дата: Пятница, 28.07.2017, 10:08 |
Сообщение № 6

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

Maryasha, но холдингов-то несколько, у каждого своя таблица? или это общая таблица? почему тянуть-то клещами информацию надо

 

Ответить

Maryasha

Дата: Пятница, 28.07.2017, 10:34 |
Сообщение № 7

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

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

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


Excel 2013

У каждого холдинга свой отдельный ФАЙЛ с показателями, условно мы создаем такой же файл для холдинга 2 и вставляем с внешнего источника сумму и количество на лист «Показатели» и формируется таблица по Холдингу 2 и тд, но тут дело то не в холдингах а в сортировке

 

Ответить

buchlotnik

Дата: Пятница, 28.07.2017, 10:48 |
Сообщение № 8

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

Цитата

дело то не в холдингах а в сортировке

дело в том, что у вас несколько файлов в ручной обработке, я бы вообще через Power Query пошёл (запрос к папке с последующим построением сводной таблицы (с моделью данных, чтобы соответствия подтягивать), фильтр по холдингу, упорядочивание по сумме), но раз только сортировка — я пас

Сообщение отредактировал buchlotnikПятница, 28.07.2017, 10:55

 

Ответить

Maryasha

Дата: Пятница, 28.07.2017, 13:44 |
Сообщение № 9

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

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

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


Excel 2013

buchlotnik, то есть простым путем(использование формул, доп. таблиц) никак не сделать?

 

Ответить

InExSu

Дата: Пятница, 28.07.2017, 13:58 |
Сообщение № 10

Группа: Друзья

Ранг: Ветеран

Сообщений: 646


Репутация:

96

±

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


Excel 2010


«Храбрость без ритуала ведёт к бунту.» deal
На данном этапе Ваш дао — сводные Excel.


Разработчик Битрикс24 php, Google Apps Script, VBA Excel

 

Ответить

Maryasha

Дата: Пятница, 28.07.2017, 15:30 |
Сообщение № 11

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

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

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


Excel 2013

InExSu, сводные мне вряд ли помогут

 

Ответить

buchlotnik

Дата: Пятница, 28.07.2017, 15:34 |
Сообщение № 12

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

а вы пробовали? все мои вопросы были направлены на то, чтобы избавится от всех этих бубнов и плясок с тяжёлыми формулами и сделать нормальную понятную сводную таблицу

 

Ответить

Maryasha

Дата: Пятница, 28.07.2017, 15:43 |
Сообщение № 13

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

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

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


Excel 2013

buchlotnik, дело в том, что формулами поттягиваются данные с 3 огромных таблиц с кучей данных и чтобы делать сводными это нужно всю систему формирования отчетности менять

 

Ответить

InExSu

Дата: Пятница, 28.07.2017, 21:43 |
Сообщение № 14

Группа: Друзья

Ранг: Ветеран

Сообщений: 646


Репутация:

96

±

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


Excel 2010

поттягиваются данные с 3 огромных таблиц

Интрига! B)


Разработчик Битрикс24 php, Google Apps Script, VBA Excel

 

Ответить

buchlotnik

Дата: Пятница, 28.07.2017, 22:47 |
Сообщение № 15

Группа: Заблокированные

Ранг: Участник клуба

Сообщений: 3442


Репутация:

929

±

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


2010, 2013, 2016 RUS / ENG

В общем, я ни черта не понял про вашу систему формирования отчётности, но если надо уж отсортировать — сделайте ещё одну таблицу с формулами — для упорядочивания

Код

=ЕСЛИОШИБКА(ИНДЕКС(Произвольное_расположение!E$3:E$66;ПОИСКПОЗ(НАИМЕНЬШИЙ(ЕСЛИ(ЕЧИСЛО(Произвольное_расположение!$E$3:$E$66);Произвольное_расположение!$E$3:$E$66+СТРОКА(Произвольное_расположение!$E$3:$E$66)%%%;»»);СТРОКА($A1));Произвольное_расположение!$E$3:$E$66+СТРОКА(Произвольное_расположение!$E$3:$E$66)%%%;0));»»)

Сообщение отредактировал buchlotnikПятница, 28.07.2017, 22:48

 

Ответить

Maryasha

Дата: Понедельник, 31.07.2017, 09:05 |
Сообщение № 16

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

Ранг: Форумчанин

Сообщений: 152


Репутация:

0

±

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


Excel 2013

buchlotnik, спасибо, а макросом это реально сделать?

 

Ответить

Pelena

Дата: Понедельник, 31.07.2017, 11:10 |
Сообщение № 17

Группа: Админы

Ранг: Местный житель

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Про «три огромные таблицы» не поняла, в примере только две. Но по ним вполне прилично строится сводная с использованием PowerPivot


«Черт возьми, Холмс! Но как??!!»
Ю-money 41001765434816

 

Ответить

VBA Sort Columns in Table. We can sort columns in table using the SortFields object of Add method in Excel. Sort single column or multiple columns in table either in ascending or descending order. We can also sort data in columns by icon, date, number, string, cell color, date, etc. Let us see syntax, different examples using VBA. Also find and learn step by step instructions to run VBA example macro code.

Table of Contents:

  • Objective
  • VBA Syntax for the SortFields object of Add method in Excel
  • VBA Sort Single Column in Table in Excel
  • Sort Multiple Columns in Table in Excel VBA
  • VBA Sort Table by Cell Color in Excel
  • VBA Sort Table Range in Ascending order in Excel
  • Sort Table Range in Descending order in Excel
  • Instructions to Run VBA Macro Code
  • Other Useful Resources

VBA Syntax for the SortFields object of Add method

Let us see the syntax for the SortFields object of Add method in Excel. We use this syntax to sort tables in Excel sheet.

SortFields.Add (Key, SortOn, Order, CustomOrder, DataOption)

Where
Key is a required parameter. It contains a range data type. It represents a key value to sort.
All the below parameters or arguments are optional and contains variant data type.
SortOn: It represents field to sort on.
Order: It represents the sort order.
CustomOrder: It represents custom sort order.
DataOption: It represents the data option.

VBA Sort Single Column in Table in Excel

Here is a simple example macro to sort single column in table in Excel using VBA. In this example we define sheet name, table name, and column name which needs to sort. Default it sorts in ascending order. The Sort object is used to apply sort to Table. And the Clear method is used to ensure that the previous sort is cleared.

'VBA Sort Single Column in Table in Excel
Sub VBAF1_Sort_Single_Column_in_Table()
    'Declare Variables
    Dim oSheetName As Worksheet
    Dim sTableName As String
    Dim loTable As ListObject
    Dim rRange As Range
    
    'Define Variable
    sTableName = "ExTable"
    
    'Define WorkSheet object
    Set oSheetName = Sheets("Table")
    
    'Define Table Range
    Set rRange = Range("ExTable[Salary]")
    
    'Define Table Object
    Set loTable = oSheetName.ListObjects(sTableName)
    
    'Sort Single Column Table
    With loTable.Sort
        'specify header is available or not
        .Header = xlYes
        
        'Clear if any existing sort
        .SortFields.Clear
        
        'Specify Column to sort
        .SortFields.Add Key:=rRange, SortOn:=xlSortOnValues
        
        'sort specific column in a table
        .Apply
    End With
    
End Sub

Output: Here is the example output screenshot of above macro procedure.

VBA Sort Single Column in Table

Sort Multiple Columns in Table in Excel VBA

Let us see another example to sort multiple columns in table in Excel VBA. Here we have to specify multiple column names to sort multiple columns data in table.

'Sort Multiple Columns in Table in Excel VBA
Sub VBAF1_Sort_Multiple_Columns_in_Table()
    'Declare Variables
    Dim oSheetName As Worksheet
    Dim sTableName As String
    Dim loTable As ListObject
    Dim rRange1 As Range
    Dim rRange2 As Range
    
    'Define Variable
    sTableName = "ExTable"
    
    'Define WorkSheet object
    Set oSheetName = Sheets("Table")
    
    'Define Table Range
    Set rRange1 = Range("ExTable[Name]")
    Set rRange2 = Range("ExTable[Salary]")
    
    'Define Table Object
    Set loTable = oSheetName.ListObjects(sTableName)
    
    'Sort Single Column Table
    With loTable.Sort
        'specify header is available or not
        .Header = xlYes
        
        'Clear if any existing sort
        .SortFields.Clear
        
        'Specify Column to sort
        .SortFields.Add Key:=rRange1, SortOn:=xlSortOnValues
        .SortFields.Add Key:=rRange2, SortOn:=xlSortOnValues
        
        'sort specified column in a table
        .Apply
    End With
    
End Sub

Output: Here is the example output screenshot of above VBA Code.

Sort Multiple Columns in Table in Excel VBA

VBA Sort Table by Cell Color in Excel

Let us see another example to sort table by cell color in Excel using VBA. You can define your own cell colors. And change RGB color in the below procedure . In this example we have seen 3 different outputs.

'VBA Sort Table by Cell Color in Excel
Sub VBAF1_Sort_Table_ByCell_Color_in_Table()

    'Declare Variables
    Dim oSheetName As Worksheet
    Dim sTableName As String
    Dim loTable As ListObject
    Dim rRange1 As Range
    
    'Define Variable
    sTableName = "ExTable"
    
    'Define WorkSheet object
    Set oSheetName = Sheets("Table")
    
    'Define Table Range
    Set rRange = Range("ExTable[Salary]")
    
    'Define Table Object
    Set loTable = oSheetName.ListObjects(sTableName)
    
    'Sort Single Column Table
    With loTable.Sort
        'specify header is available or not
        .Header = xlYes
        
        'Clear if any existing sort
        .SortFields.Clear
        
        'Specify Column to sort
        .SortFields.Add(Key:=rRange, Order:=xlAscending, SortOn:=xlSortOnCellColor).SortOnValue.Color = RGB(255, 255, 0)
          
        'sort specified column in a table
        .Apply
    End With
   
End Sub

Output: Here is the example output screenshot of above VBA Code.

VBA Sort Table by Cell Color in Excel

Note: Find the following link for more numbers of color index in Excel VBA.

ColorIndex in Excel VBA

VBA Sort Table Range in Ascending order in Excel

Here is one more example to sort table range in ascending order in table in Excel VBA. In this example we are sorting name column in ascending order.

'VBA Sort Table Range in Ascending order in Excel
Sub VBAF1_Sort_Table_Range_in_Ascending_Order_in_Table()

    'Declare Variables
    Dim oSheetName As Worksheet
    Dim sTableName As String
    Dim loTable As ListObject
    Dim rRange1 As Range
    
    'Define Variable
    sTableName = "ExTable"
    
    'Define WorkSheet object
    Set oSheetName = Sheets("Table")
    
    'Define Table Range
    Set rRange = Range("ExTable[Name]")
    
    'Define Table Object
    Set loTable = oSheetName.ListObjects(sTableName)
    
    'Sort Single Column Table
    With loTable.Sort
        'specify header is available or not
        .Header = xlYes
        
        'Clear if any existing sort
        .SortFields.Clear
        
        'Specify Name Column to sort in ascending order
        .SortFields.Add Key:=rRange, SortOn:=xlSortOnValues, Order:=xlAscending
        
        'sort specific column in a table
        .Apply
    End With
   
End Sub

Sort Table Range in Descending order in Excel

Here is one more example to sort table range in descending order in table in Excel VBA. In this example we are sorting salary column in descending order.

'VBA Sort Table Range in Descending order in Excel
Sub VBAF1_Sort_Table_Range_in_Descending_Order_in_Table()

    'Declare Variables
    Dim oSheetName As Worksheet
    Dim sTableName As String
    Dim loTable As ListObject
    Dim rRange1 As Range
    
    'Define Variable
    sTableName = "ExTable"
    
    'Define WorkSheet object
    Set oSheetName = Sheets("Table")
    
    'Define Table Range
    Set rRange = Range("ExTable[Salary]")
    
    'Define Table Object
    Set loTable = oSheetName.ListObjects(sTableName)
    
    'Sort Single Column Table
    With loTable.Sort
        'specify header is available or not
        .Header = xlYes
        
        'Clear if any existing sort
        .SortFields.Clear
        
        'Specify salary Column to sort in descending order
        .SortFields.Add Key:=rRange, SortOn:=xlSortOnValues, Order:=xlDescending
        
        'sort specific column in a table
        .Apply
    End With
   
End Sub

Instructions to Run VBA Macro Code or Procedure:

You can refer the following link for the step by step instructions.

Instructions to run VBA Macro Code

Other Useful Resources:

Click on the following links of the useful resources. These helps to learn and gain more knowledge.

VBA Tutorial VBA Functions List VBA Arrays in Excel VBA Tables and ListObjects

VBA Editor Keyboard Shortcut Keys List VBA Interview Questions & Answers Blog

Понравилась статья? Поделить с друзьями:
  • Сортировка текстовых значений в excel
  • Сортировка текста формулой excel
  • Сортировка текста по алфавиту в word 2016
  • Сортировка текста как числа excel
  • Сортировка текста в таблицах word