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

Excel macros might not be as comprehensive as other automation tools, but the validity and efficiency of Excel VBA can’t be undermined. If you work in Excel and other Microsoft Office tools like Word and Access, you can’t go wrong with VBA and its capabilities.

MS Excel is a powerful tool that offers a ton of options to its users. From storing data to creating automated dashboards, you can do it all in Excel and its spreadsheets.

If you want to use VBA to automate your sorting responsibilities in Excel, give these efficient easy-to-apply macros a try.

Download a Dummy Dataset

For starters, you can download a dummy dataset to work on your Excel macro skills.

Rest assured, once you get the hang of these macros and better understand how things work, you can shift the code to fit your own spreadsheets for work or school.

You can download the dataset used in this article if you’d like to follow along.

Download: Excel Dataset

1. Sorting One Column Using Excel Macros

Use this simple code to sort a data column within an Excel spreadsheet. If you downloaded the dummy dataset, you can try sorting column E (Units Sold).

Open a new Excel file and save it with an Excel Macro-Enabled Workbook (.xlsm) workbook type. This file will store the macro to sort your data from another file.

You will be controlling your file(s) from the macro file, which will interact with your workbooks separately.

Enter the following code:

 Sub sortwithheaders()

Workbooks("Financial Sample.xlsx").Sheets(1).Activate

Range("A1:P701").sort Key1:=Range("e1"), Order1:=xlAscending, Header:=xlYes

End Sub

Where:

  • Key1: Define the column(s) that you want to sort
  • Order1: Ordering method (ascending/descending)
  • Header: If your content has headers, this option will remain as xlYes. Alternatively, select xlNo.

Save a macro file in Excel

The range will consist of the starting cell and ending cell address so that everything is captured for sorting purposes. The result is that your entire data set will be sorted based on the data in column E.

2. Sorting Dynamic Data in a Single Column

There may be instances wherein your starting point is defined, but your endpoint is dynamic. In such a case, you can make your code dynamic so that it picks up the end of the range automatically.

To accommodate the change in data, use the code below:

 Sub sortwithheaders()

Workbooks("Financial Sample.xlsx").Sheets(1).Activate

Range("A1", Range("A1").End(xlDown)).sort Key1:=Range("e2"), Order1:=xlAscending, Header:=xlYes

End Sub

Where:

  • End(xlDown): This function will auto-pick the last populated cell automatically

Note: If the formula encounters a blank cell within a column, it will consider the preceding cell as the end of the range.

3. Sorting Multiple Columns Together

There might be situations when you want to sort data in multiple columns in one go. To do so, you can use the following code to achieve your purpose:

 Sub SortMultipleColumns()

With Worksheets("Sheet1")

       With .Cells(1, "A").CurrentRegion

           .Cells.sort Key1:=.Range("B1"), Order1:=xlAscending, _

                       Key2:=.Range("E1"), Order2:=xlAscending, _

                       Orientation:=xlTopToBottom, Header:=xlYes

       End With

   End With

End Sub

Sort Multiple Columns VBA

4. Sorting Columns Across Multiple Sheets

When you’re dealing with multiple sheets, you might want to get your data ready to be put into a dashboard. One of the most important aspects of data preparation is sorting it, and getting the data arranged in a certain format to present to your stakeholders or clients.

One option is to cycle through each sheet manually, sort the required columns, and then proceed to the next step. Alternatively, why not let VBA do it for you?

The intent of the code below is to cycle through each available sheet in the workbook, and based on the columns specified, sort the available data.

Here’s how you can sort columns across multiple sheets:

 Sub SortWS()
Dim ws As Worksheet
'Activate the intended worksheet
Workbooks("Financial Sample.xlsx").Activate
'Cycle through each individual worksheet automatically using for loop
For Each ws In ActiveWorkbook.Sheets
'activate each individual worksheet
ws.Activate
'Define the range and then sort the column basis your requirements. In this case, only one column in being sorted.
Range("A1", Range("p1").End(xlDown)).sort Key1:=Range("E1"), Order1:=xlDescending, Header:=xlYes
'Command used to cycle to the next worksheet, once the previous worksheet has been sorted
Next ws
End Sub

All the information starting with single quotes are VBA comments. These are not executed during the execution stage. However, every VBA comment you add is a meaningful addition to the code, as you can define the essence, functionality, and other relevant portions within the code sections.

Code to sort columns across multiple sheets in Excel VBA

5. Copying Sorted Data From One Sheet to Another

Imagine a situation where you want to sort the data and copy the whole dataset (or parts thereof) into a newly added sheet. In such cases, you can use the below code to perform the task at hand:

 Sub SortWS()

Dim ws As Worksheet

'Activate the intended worksheet

Workbooks("Financial Sample.xlsx").Activate

'Cycle through each individual worksheet automatically using for loop

For Each ws In ActiveWorkbook.Sheets

'activate each individual worksheet

ws.Activate

'Define the range and then sort the column basis your requirements.
'In this case, only one column in being sorted.

Range("A1", Range("p1").End(xlDown)).sort Key1:=Range("E1"), Order1:=xlDescending, Header:=xlYes

'Command used to cycle to the next worksheet, once the previous worksheet has been sorted

Next ws

'Create a new worksheet within the workbook to store the new data

ActiveWorkbook.Sheets.Add.Name = "Results"

'Copy paste the sorted data into the newly added sheet

Sheets("Sheet1").Range("A1:p701").Copy Destination:=Sheets("Results").Range("a1")

End Sub

Sort and paste data into a new sheet

The above code will sort the values in column E, add a new sheet Results into the existing workbook, and paste the sorted results in cell A1.

Creating Sorting Macros in Excel

Excel VBA is a nifty language that can save you a lot of time and effort. By using VBA macros, you can create extensive dashboards, easily sort data with a few clicks, and perform different functions with ease.

Luckily, Excel’s functionality doesn’t end with macros. Check out some tips and tricks to become a more efficient Excel user.

 

Nero50789454

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

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

#1

22.09.2016 21:02:52

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

Код
Sub ert()
Dim r As Range
Application.ScreenUpdating = 0
With [a1].CurrentRegion
    For Each r In .Rows
        r.Sort Key1:=r.Cells(1), Order1:=xlAscending, Orientation:=xlLeftToRight
    Next
End With
Application.ScreenUpdating = 1
End Sub
 

Мотя

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

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

А не проще ли таблицу транспонировать?

 

в таблицах 150 столбцов и больше 5000 строк, а сортировать каждый столбец вручную стандартными методами очень долго

Изменено: Nero5078945422.09.2016 21:24:15

 

Мотя

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

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

1. Ваша таблица регламентна?
2. Столбы в таблице независимы?
3. Проблема: нужна новая таблица, в которой каждый столб сортирован «индивидуально»?
Прикрепите «кусок» Вашей реальной таблицы: «конфиденс» замените на яблоки-груши.

 

Ігор Гончаренко

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

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

#5

22.09.2016 21:54:27

Код
Sub SortEachColumn()
  Dim c As Range
  For Each c In [a1].CurrentRegion.Columns
    c.Sort c.Cells(1), xlAscending
  Next
End Sub

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

 

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

Изменено: Nero5078945422.09.2016 22:01:55

 

Nero50789454

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

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

#7

22.09.2016 22:04:30

Цитата
Ігор Гончаренко написал:
Код

спасибо!!! помогло!!!

 

vikttur

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

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

Всегда удивляюсь: для чего люди в ник вставляют кучу цифр? Красота? Смотрится непонятно… Выделиться? Глупо выделяться таким образом. Пароль агента с другого форума или размер обуви троюродного дедушки? :)
Для че-го, Неропятьнольсемьвосемьдевятьчетырепятьчетыре?

 

Мотя

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

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

Полагаю, столбы — Дата, Время — не участвуют в сортировке?

 

Nero50789454

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

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

#10

22.09.2016 23:20:04

Цитата
Мотя написал:
Полагаю, столбы — Дата, Время — не участвуют в сортировке?

они для первичной обработки, а в следствии не учитываются

Цитата
vikttur написал:
Для че-го, Неропятьнольсемьвосемьдевятьчетырепятьчетыре?

тебе не все ли равно? не знаешь что написать, лучше ни чего не писать

 

vikttur

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

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

#11

22.09.2016 23:38:24

Мне, как модератору, не все равно.
Из Правил форума:

Цитата
ЗАПРЕЩЕНО:  3.2. Использовать в… именах и логинах на форумах… текст с… бессмысленным набором символов… Администрация вправе удалить такого пользователя без предупреждения.

У нас на форуме принято с незнакомыми общаться на «Вы»

 

Юрий М

Модератор

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

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

#12

23.09.2016 00:04:45

Цитата
Nero50789454 написал:
тебе не все ли равно? не знаешь что написать, лучше ни чего не писать

Во-первых, не нужно ТЫКАТЬ незнакомому человеку.
Во-вторых, Вам сделали справедливое замечание и реагируйте должным образом, а не огрызайтесь.

Макрос-сортировка столбца

wwizard

Дата: Вторник, 10.01.2017, 13:04 |
Сообщение № 1

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

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

Сообщений: 174

Добрый день.
Можно придумать маленьки макрос, который бы просто сортировал, всю таблицу, по примеру кнопки на панели?
Т.е. — есть огромная таблица, нужно ее постоянно сортировать по 8му столбцу и по 10му.

Т.е. сначала столбец № 8, потом столбец №10

[vba]

Код

Sub Сортировка строк по данным в столбце 8()
    Range(«A3:F26»).Sort Key1:=Range(«C3»), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End Sub

[/vba]

Пробовал по этому примеру, ничего не получилось

 

Ответить

Pelena

Дата: Вторник, 10.01.2017, 13:11 |
Сообщение № 2

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Здравствуйте.
Макрорекодер записал так в Вашем примере
[vba]

Код

Sub Макрос1()

‘ Макрос1 Макрос


    ActiveWorkbook.Worksheets(«Лист1»).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(«Лист1»).Sort.SortFields.Add Key:=Range(«H2:H5»), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets(«Лист1»).Sort.SortFields.Add Key:=Range(«K2:K5»), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(«Лист1»).Sort
        .SetRange Range(«A1:K5»)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

[/vba]


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

 

Ответить

Wasilich

Дата: Среда, 11.01.2017, 10:48 |
Сообщение № 3

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

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

Сообщений: 1232


Репутация:

326

±

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


2003

А у меня так
[vba]

Код

Sub Кнопка1_Щелкнуть()

‘ Кнопка1_Щелкнуть Макрос

    Range(«A2:R5»).Select
    Selection.Sort Key1:=Range(«H2»), Order1:=xlAscending, Key2:=Range(«J2») _
        , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
        xlSortNormal
End Sub

[/vba]

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 12:39 |
Сообщение № 4

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

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

Сообщений: 174

Странно — у меня ни один не заработал

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 12:50 |
Сообщение № 5

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

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

Сообщений: 174

Вот так это выглядит до: http://prntscr.com/du6k09
Любой из этих макросов, как и мой — записаный рекордером, делает — обратное. Часть строк остается, и сортирются только значения в столбцах. А нужно, чтобы все значения переставлялись, как еслибы я делал так:http://prntscr.com/du6l3a
А сейчас я получаю, после запуска любого из этих, или свой макрос, это: http://prntscr.com/du6llj — но оно неверно.

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

12.xlsm
(13.8 Kb)

Сообщение отредактировал wwizardСреда, 11.01.2017, 12:50

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 13:01 |
Сообщение № 6

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

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

Сообщений: 174

Разобрался. Один вопрос, как вместо:

[vba]

[/vba]

K33 — поставить до конца листа?

 

Ответить

китин

Дата: Среда, 11.01.2017, 13:03 |
Сообщение № 7

Группа: Модераторы

Ранг: Экселист

Сообщений: 6973


Репутация:

1063

±

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


Excel 2007;2010;2016


Не судите очень строго:я пытаюсь научиться
ЯД 41001877306852

 

Ответить

bmv98rus

Дата: Среда, 11.01.2017, 13:31 |
Сообщение № 8

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

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

Сообщений: 4009


Репутация:

760

±

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


Excel 2013/2016

wwizard,

та может надо просто столбцы указать от и до и Header = xlYes в примере то заголовак в первой строке

код от Wasilich, но не проверял именно этот
[vba]

Код

Sub Кнопка1_Щелкнуть()

‘ Кнопка1_Щелкнуть Макрос

    Range(«A:R»).Select
    Selection.Sort Key1:=Range(«H:H»), Order1:=xlAscending, Key2:=Range(«j;J») _
        , Order2:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
        xlSortNormal
End Sub

[/vba]


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rusСреда, 11.01.2017, 13:35

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 13:42 |
Сообщение № 9

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

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

Сообщений: 174

[vba]

Код

Sub Макрос1цуцуцуцуцу()

‘ Макрос1цуцуцуцуцу Макрос

    Cells.Select
    ActiveWorkbook.Worksheets(«Лист1»).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(«Лист1»).Sort.SortFields.Add Key:=Range(«H:H»), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets(«Лист1»).Sort.SortFields.Add Key:=Range(«J:J»), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(«Лист1»).Sort
        .SetRange Range(«A1:K»)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    Range(«I19»).Select
End Sub

[/vba]

Не заработало

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 13:45 |
Сообщение № 10

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

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

Сообщений: 174

[vba]

Код

Range(«A1:K» & Cells(Rows.Count, 1).End(xlUp).Row).Select

[/vba]
И если первую вставляю такую — то тоже не работает

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 13:53 |
Сообщение № 11

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

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

Сообщений: 174

В общем не получается, не понимаю.

[vba]

Код

ub æ_Ìàêðîñ_ñîðòèðîâêà()

    Cells.Select
    ActiveWorkbook.Worksheets(«Ëèñò1»).Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(«Ëèñò1»).Sort.SortFields.Add Key:=Range(«H2:H»)
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets(«Ëèñò1»).Sort.SortFields.Add Key:=Range(«K2:K»)
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(«Ëèñò1»).Sort
        .SetRange Range(«A1:K» & lr).Value
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

[/vba]

Сообщение отредактировал wwizardСреда, 11.01.2017, 13:53

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 13:54 |
Сообщение № 12

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

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

Сообщений: 174

та может надо просто столбцы указать от и до и Header = xlYes в примере то заголовак в первой строке

Можете указать в файле пример, бо у меня не заработало — чтото догнать не могу

 

Ответить

bmv98rus

Дата: Среда, 11.01.2017, 15:06 |
Сообщение № 13

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

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

Сообщений: 4009


Репутация:

760

±

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


Excel 2013/2016

wwizard,
из рекордера по быстромую
[vba]

Код

Sub Macro1()

    ActiveSheet.Sort.SortFields.Clear
    ActiveSheet.Sort.SortFields.Add Key:=Range(«H:H»), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveSheet.Sort.SortFields.Add Key:=Range(«J:J»), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveSheet.Sort
        .SetRange Range(«A:K»)
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End Sub

[/vba]


Замечательный Временно просто медведь , процентов на 20.

Сообщение отредактировал bmv98rusСреда, 11.01.2017, 15:28

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 17:11 |
Сообщение № 14

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

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

Сообщений: 174

Так в томто и дело, что по быстрому не интересно. Интересно разобратся, а спросить совета было не у кого.

 

Ответить

wwizard

Дата: Среда, 11.01.2017, 17:21 |
Сообщение № 15

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

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

Сообщений: 174

К примеру:

[vba]

Код

Sub Пересчет_цены_с_курса()

    ActiveCell.FormulaR1C1 = «=RC[1]/R[-1]C»
    Range(«E2»).Select
    Selection.AutoFill Destination:=Range(«E2:E27»)
    Range(«E2:E27»).Select
    Columns(«E:E»).Select
    Selection.NumberFormat = «0.0_ ;[Red]-0.0 «
    Range(«E22»).Select
End Sub

[/vba]

Тут он берет по 27 строку. Вот как сделать чтобы определял количество заполненных строк например по первой колонке, и считал только при этом?

 

Ответить

bmv98rus

Дата: Среда, 11.01.2017, 17:26 |
Сообщение № 16

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

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

Сообщений: 4009


Репутация:

760

±

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


Excel 2013/2016


Замечательный Временно просто медведь , процентов на 20.

 

Ответить

Wasilich

Дата: Среда, 11.01.2017, 20:01 |
Сообщение № 17

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

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

Сообщений: 1232


Репутация:

326

±

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


2003

как сделать чтобы определял количество заполненных строк например по первой колонке

Да уж, никто не поймет что вам надо.
Количество заполненных строк по первой колонке. (только заполненных, без учета пустых). Только не понятно зачем это для сортировки
[vba]

Код

KZS = WorksheetFunction.CountA(Columns(1))

[/vba]
Надо то, последняя заполненная строка (по первой колонке)
[vba]

Код

PZS = Range(«A» & Rows.Count).End(xlUp).Row
PZS = Cells(Rows.Count, 1).End(xlUp).Row
PZS  = Columns(1).SpecialCells(xlCellTypeLastCell).Row

[/vba]А в коде так
[vba]

Код

Sub Кнопка1_Щелкнуть()
    PZS = Range(«A» & Rows.Count).End(xlUp).Row
    Range(«A2:R» & PZS).Sort Key1:=Range(«H2»), Order1:=xlAscending, Key2:=Range(«J2») _
        , Order2:=xlAscending, Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:= _
        xlSortNormal
End Sub

[/vba]
Или Вам нужна раздельная сортировка по Н и по J. Вразумите нас.

Сообщение отредактировал WasilichСреда, 11.01.2017, 20:05

 

Ответить

DrMini

Дата: Воскресенье, 02.07.2017, 13:00 |
Сообщение № 18

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

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

Сообщений: 1021


Репутация:

94

±

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


Excel LTSC 2021 RUS


Доброго времени суток. Искал сортировку таблицы макросом и «набрёл» на эту тему. Я своим скудным умишком вроде домыслил, как применить это для себя ЛИСТ «Таблица» .Но не нравится, что после работы макроса все ячейки обработанные макросом становятся выделенными. Помогите исправить.

 

Ответить

Pelena

Дата: Воскресенье, 02.07.2017, 13:07 |
Сообщение № 19

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

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

Сообщений: 18797


Репутация:

4284

±

Замечаний:
±


Excel 2016 & Mac Excel

Просто добавьте в конец макроса активацию какой-нибудь ячейки, например,
[vba][/vba]


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

 

Ответить

RAN

Дата: Воскресенье, 02.07.2017, 13:10 |
Сообщение № 20

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

Ранг: Экселист

Сообщений: 5645

Достаточно просто удалить слова Select и Selection.


Быть или не быть, вот в чем загвоздка!

 

Ответить

Skip to content

На чтение 3 мин. Просмотров 1.3k.

Что делает макрос: Если часто добавлять данные в ваши сводные таблицы, вы можете заметить, что новые данные автоматически не попадают в порядок сортировки существующих данных. Вместо этого, он прикрепляется к нижней части существующих данных. Это означает, что ваши раскрывающиеся списки показывают все новые данные в самом низу, в то время как существующие данные сортируются в алфавитном порядке. Макрос дает возможность сортировать все поля сводной в алфавитном порядке.

Содержание

  1. Как макрос работает
  2. Код макроса
  3. Как этот код работает
  4. Как использовать

Как макрос работает

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

Код макроса

Sub SortirovatPolyaSvodnoiPoAlfavitu()
'Шаг 1: Объявляем переменные
Dim pt As PivotTable
Dim pf As PivotField
'Шаг 2: Курсор на активную ячейку в сводной таблице
On Error Resume Next
Set pt = ActiveSheet.PivotTables(ActiveCell.PivotTable.Name)
'Шаг 3: Выход, если активная ячейка не в сводной таблице
If pt Is Nothing Then
MsgBox "Вы должны поместить курсор в сводную таблицу."
Exit Sub
End If
'Шаг 4: Перебрать все сводные поля и отсортировать
For Each pf In pt.PivotFields
pf.AutoSort xlAscending, pf.Name
Next pf
End Sub

Как этот код работает

  1. Шаг 1 объявляет две переменные объекта, используя Pt в качестве контейнера памяти для сводной таблицы и Pf в качестве контейнера для памяти наших полей данных. Это позволяет макросу перебрать все поля данных в сводной таблице.
    Активная ячейка должна находиться внутри сводной таблицы для запуска макроса. Когда курсор находится внутри определенной сводной таблицы, действие макроса выполняется на этой оси.
  2. На шаге 2 мы устанавливаем переменную Pt на имя сводной таблицы, на которой найдена активная ячейка. Мы делаем это, используя свойство ActiveCell.PivotTable.Name, чтобы получить имя целевой сводной.
    Если активная ячейка не находится внутри сводной таблицы, выдается ошибка. Именно поэтому мы используем On Error Resume Next Statement. Это говорит Excel продолжить макро, если есть ошибка.
  3. Шаг 3 проверяет, заполнена ли переменная PT сводной таблицы объекта. Если переменная PT установлена в Nothing, активная ячейка была не на сводной таблице, таким образом, сводной таблице не может быть присвоена переменная. Если дело обстоит именно так, то макрокоманда помещает окно сообщения, чтобы уведомить пользователя, а затем выходит
    из процедуры.
  4. И, наконец, мы используем оператор For Each, чтобы перебирать поля сводной. Каждый раз, когда выбрано новое поле сводной, мы используем метод AutoSort, чтобы сбросить автоматические правила сортировки для поля. В этом случае мы сортируем все поля в порядке возрастания. После того как все поля данных были оценены, макрос заканчивается.

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.

Like this post? Please share to your friends:
  • Сортировка электронные таблицы в microsoft excel
  • Сортировка числовых значений в excel
  • Сортировка чисел от минимального к максимальному excel
  • Сортировка чисел в тексте в excel
  • Сортировка чисел в строке excel