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

 

Доброго времени суток!
Как сделать, чтобы при добавлении новой фамилии происходила автоматическая сортировка при нажатии клавиши enter от А до Я в колонке В строка 2?
Читал в архиве много, но там более сложные задачи))) Просмотрел весь ютуб, и тоже не нашел ответа.)))

Заранее премного благодарен

Изменено: Karen-Sochi25.03.2017 21:14:44

 

Sanja

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

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

#2

25.03.2017 21:27:57

В модуль нужного листа

Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Columns(2)) Is Nothing Then
On Error Resume Next
Application.ScreenUpdating = False
Application.EnableEvents = False
    With Me.Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("B1"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        .SetRange Range("B2:B" & Cells(Rows.Count, 2).End(xlUp).Row)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
End If
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

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

 

В «теле» уже есть 10 модулей, пара листов в книге. Нужно создать новый модуль?.

 

Sanja

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

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

Правой кнопкой мыши по ярлыку нужного листа — Исходный текст. Откроется как раз модуль нужного листа

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

 

Все получилось, спасибо)))
Но нарисовалась следующая проблема: Вместе с этим столбцом(В) есть еще три взаимосвязанных столбца:
Фамилия(В) Звание(С) Рейтинг(D) Нас. пункт(E)., которые привязаны к конкретной фамилии.
При нажатии enter вновь написанная ячейка благополучно перескакивает на свое место,
и все остальные данные сбиваются. Как при перемещении связать эти столбцы?

Изменено: Karen-Sochi25.03.2017 22:10:52

 

Sanja

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

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

#6

25.03.2017 22:12:23

Цитата
Karen-Sochi написал:
нарисовалась следующая проблема

Вы бы ‘нарисовали’ лучше файл-пример, в котором-бы показали Как есть — Как надо.

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

 

С автоматической нумерацией разобрался, столбец А меня не интересует  

 

Sanja

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

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

В коде выше (сообщение # 2), строку 9 исправьте так
.SetRange Range(«B2:E» & Cells(Rows.Count, 2).End(xlUp).Row)

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

 

Не помогло.
Если можно, пропишите в высланном файле.
Исходный файл сбросить не могу, размер больше допустимого,
поэтому пришлось сделать новую таблицу

 

Sanja

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

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

#10

25.03.2017 22:46:50

Цитата
Karen-Sochi написал: пропишите в высланном файле

Вы сами не можете поменять ОДНУ букву в коде? Обратите внимание что E-латинская!

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

 

Я поменял, в моей таблице не работает
Ну не совсем я неумеха)))
Могу дать доступ на тайм вьювер, можете проверить

 

gling

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

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

#12

25.03.2017 22:52:31

Цитата
Karen-Sochi написал:
Я поменял, в моей таблице не работает

Возможно Е русской раскладки, а надо англ.

 

Sanja

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

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

Странно…

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

 

Именно в английской поменял.
Перепроверил два раза.
И еще, при переходе для заполнения  на другую ячейку
строка сразу перемещается на свое место

 

Наверное тяжелый случай)))
Есть электронка или скайп?
В этой таблице работает, а ТАМ где мне нужно не работает)))

 

Sanja

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

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

#16

25.03.2017 23:02:19

Цитата
Karen-Sochi написал: строка сразу перемещается на свое место

Так а Вы что просили?

Цитата
Karen-Sochi написал: чтобы при добавлении новой фамилии происходила автоматическая сортировка при нажатии клавиши enter

Ровно это макрос и делает

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

 

Да, делает,  в той таблице, которую я Вам послал макрос делает именно так, как мне нужно!
Но!!!
В том файле, в котором нужна эта функция строка сразу перемещается на свое место при сортировке, и все данные в других столбцах сдвигаются.
Вопрос не в Вас, и не в Вашей квалификации. Вы ответили очень быстро, спасибо.
Но в том файле, в котором мне нужно не работает((( то есть не тянет за собой всю строку в других столбцах(((

 

Sanja

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

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

В коде, букву E замените на букву крайнего правого столбца Вашей таблицы

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

 

Крайний правый столбец Е
В файле еще есть много макросов, возможно они каким-либо образом влияют ,

 

Спасибо, Вы мне очень помогли)))))))
Все получилось как надо!!!

 

lerasoroka

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

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

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

 

Ксюшка

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

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

Уважаемые эксперты! Большая просьба. Помогите пожалуйста с данным макросом.
Что делать, если нужно на одном листе сортировать два диапазона строк?
У меня почему-то не получается адаптировать макрос под эту потребность.
Нужна сортировка, к примеру диапазонов E12:CO68  и E70:CO212

Заранее благодарна.

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

  • 1812.xls (61.5 КБ)

 

Sanja

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

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

А какой ключевой столбец для сортировки?

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

 

Ксюшка

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

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

Ой, ключевой столбец D.
Но даже при условии, что в макросе поменяла, он все-равно не работает

 

Sanja

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

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

#25

27.07.2017 16:46:04

Замените ВСЕ, что у Вас в модуле листа одним макросом

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

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

  • Сортировка двух диапазонов.xls (62 КБ)

Изменено: Sanja27.07.2017 16:49:34

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

 

AAF

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

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

#26

27.07.2017 18:16:43

К Файлу в сообщении

7

Сортировка по нескольким столбцам
Модуль листа

Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then 'номер столбца на листе, при котором срабатывает сортировка
  TblSort Target, "Фамилия, имя|Населенный пункт", 1
End If
End Sub

Стандартный модуль

Код
Sub TblSort(ByVal trgt As Range, Optional fldSort As String, Optional n As Long)
'trgt - ячейка принадлежащая таблице
'fldSort - перечень столбцов подлежащих сортировке в опред. порядке, например: "ФИО|Город"
Dim aFldSort, a, fldNm, rngTbl As Range, i As Long
Set rngTbl = trgt.CurrentRegion 'захват таблицы
If rngTbl.Rows.Count < 3 Then Exit Sub 'сортировать одну строку бессмысленно
If fldSort = "" Then Exit Sub   'не указано что сортировать
aFldSort = Split(fldSort, "|")
a = rngTbl.Resize(1, rngTbl.Columns.Count + 1).Value '+1 на случай одного столбца
With rngTbl.Parent.Sort
  .SortFields.Clear
  For Each fldNm In aFldSort
    For i = 1 To UBound(a, 2) - 1 '-1 компенсация на случай одного столбца
      If fldNm = a(1, i) Then
        .SortFields.Add Key:=Columns(rngTbl.Column + i - 1), _
          SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        Exit For
      End If
    Next
  Next
  If .SortFields.Count Then 'если ключи установлены(найдены заголовки столбцов для сортировки)
    .SetRange rngTbl 'регион сортировки
    .Header = xlYes 'считается, что таблица имеет заголовки
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    If n Then 'если указан столбец последовательной нумерации
      a = rngTbl.Resize(, 1).Offset(n - 1).Value
      If IsNumeric(a(UBound(a) - 1, 1)) Then a(UBound(a), 1) = a(UBound(a) - 1, 1) + 1
    End If
    Application.ScreenUpdating = False
    Application.EnableEvents = False
    .Apply
    If n Then rngTbl.Resize(, 1).Offset(n - 1).Value = a 'нумерация
    Application.EnableEvents = True
    Application.ScreenUpdating = True
  Else
    Exit Sub
  End If
End With
End Sub

Изменено: AAF27.07.2017 18:23:27

 

Ксюшка

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

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

 

Ксюшка

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

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

#28

28.07.2017 10:26:55

Цитата
Sanja написал:
Замените ВСЕ, что у Вас в модуле листа одним макросом

Sanja

, у меня все отлично работает. Но подскажите мне пожалуйста. У меня таблица гораздо больше, чем тот вариант, который я прислала (полная версия не загружалась). Я не нашла где в макросе регулируется диапазон. (Стыдно, лузер…..). Подскажите мне пожалуйста, где это в макросе нужно регулировать. Реальные диапазоны 12:785 и 787:1561

 

Sanja

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

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

#29

29.07.2017 13:58:44

Цитата
Ксюшка написал: не нашла где в макросе регулируется диапазон

В коде диапазоны ;жёстко не прописаны. Их адреса определяются в ходе работы макроса, и привязаны к ячейкам с названиями («Канцелярські товари» и «Господарські товари»)

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

 

Ксюшка

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

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

#30

31.07.2017 10:18:14

Спасибо огромное! Все работает. Счастлива!!!  :D  :D  :D  

62 / 62 / 1

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

Сообщений: 1,440

1

Автоматическая сортировка

18.04.2012, 16:35. Показов 25063. Ответов 15


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

Excel 2007.
По столбцу проведена сортировка.
При изменении или добавлении значения ячейки в этом столбце,
необходимо чтобы выполнялась автоматическая сортировка.
Что бы не нужно было нажимать Сортировка и фильтры->Применить повторно…



0



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

18.04.2012, 16:44

2

В модуль листа (правый клик по ярлычку листа — Исходный текст):

Visual Basic
1
2
3
4
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range("A:A")) Is Nothing Then Exit Sub
[A1].CurrentRegion.Sort [A1], xlAscending, Header:=xlYes
End Sub

Вместо «А:А» — ваш столбец, вместо [A1] — первая ячейка этого столбца. Если заголовка нет, то Header:=xlNo
Макросы должны быть разрешены.



3



19vitek

730 / 406 / 95

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

Сообщений: 756

18.04.2012, 16:53

3

как вариант

Visual Basic
1
2
3
4
5
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A:A")) Is Nothing Then
        Range("a:a").Sort Key1:=[a1]
    End If
End Sub



1



62 / 62 / 1

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

Сообщений: 1,440

18.04.2012, 17:26

 [ТС]

4

Спасибо огромное. Всё работает!
А стандартных средств этому действию нет?
В смысле галочку где-нибудь поставить автоматически обновлять — такого нет???

Добавлено через 10 минут
И ещё один вопрос:
У меня сортировка по двум столбцам, после того как отсортирован первый,
нужно до отсортировать второй. Команда:

Код

[B1].CurrentRegion.Sort [B1], xlAscending, Header:=xlYes

Снимает первую сортировку, как отсортировать образовавшиеся группы,
с учётом результатов первой сортировки?

Добавлено через 7 минут
Сделал так:

Код

[A1].CurrentRegion.Sort [A1], xlAscending, Key2:=[B1], Order2:=xlAscending, Header:=xlYes

.. вроде работает!??? Правильно???



1



15136 / 6410 / 1730

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

Сообщений: 9,999

18.04.2012, 17:36

5

Правильно



0



62 / 62 / 1

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

Сообщений: 1,440

18.04.2012, 17:57

 [ТС]

6

Отлично



0



1 / 1 / 0

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

Сообщений: 9

20.07.2015, 21:13

7

Тоже возникла такая же необходимость, как и у автора темы

С сортировкой разобрался, спасибо огромное

Но есть еще вопрос —
Как сделать чтобы при сортировке курсор остался на этой же ячейке (уже отсортированной) или в соседней.
Т.е. например — у меня настроена сортировка по столбцу E. Я ввожу в ячейку E565 дату и строка автоматом поднимается на верх в порядке сортировки. Но курсор либо смещается на ячейку E566 (если нажать Enter) либо в ячейку F565 (если нажать Tab), т.е. я уже не вижу отсортированную строку.
И потом приходится прокручивать страницу и искать.
Как сделать чтобы курсор передвигался туда же, куда отсортировалась последняя строка?



0



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

21.07.2015, 00:13

8

alex70, ячейку придется искать в столбце. Как именно искать, зависит от данных:
— если значения в столбце уникальные, то искать значение;
— если значения в каждом столбце не уникальные, но записи (строки) уникальные, то искать запись;
— если в ст. E не используются примечания, можно перед сортировкой создать примечание, найти по нему и удалить.
Ниже вариант с примечанием.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_Change(ByVal Target As Range)
Dim dc&, dr&, ct$
  Set Target = Intersect(Target, Range("E:E"))
  If Target Is Nothing Then Exit Sub
  dc = ActiveCell.Column - Target.Column
  dr = ActiveCell.Row - Target.Row
  ct = Format(Now, "yyyymmddhhmmss")
  Target.Cells(1).AddComment ct
  [E1].CurrentRegion.Sort [E1], xlAscending, Header:=xlYes
  Set Target = Range("E:E").Find(ct, , xlComments, xlWhole)
  If Not Target Is Nothing Then
    Target.Comment.Delete
    Target.Offset(dr, dc).Activate
  End If
End Sub



3



5 / 5 / 1

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

Сообщений: 86

06.01.2017, 15:04

9

Цитата
Сообщение от Казанский
Посмотреть сообщение

В модуль листа (правый клик по ярлычку листа — Исходный текст):
Visual BasicВыделить код

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(«A:A»)) Is Nothing Then Exit Sub
[A1].CurrentRegion.Sort [A1], xlAscending, Header:=xlYes
End Sub
Вместо «А:А» — ваш столбец, вместо [A1] — первая ячейка этого столбца. Если заголовка нет, то Header:=xlNo
Макросы должны быть разрешены.

Вот этот код у меня сработал. А как сделать, чтобы все колонки на листке сортировались независимо друг от друга по алфавиту?

Так у меня не сработало:

Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(«A:A»)) Is Nothing Then Exit Sub
[A1].CurrentRegion.Sort [A1], xlAscending, Header:=xlYes
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Intersect(Target, Range(«B:B»)) Is Nothing Then Exit Sub
[B1].CurrentRegion.Sort [B1], xlAscending, Header:=xlYes
End Sub



0



Казанский

15136 / 6410 / 1730

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

Сообщений: 9,999

06.01.2017, 20:32

10

dwell, пробуйте. Можно менять сразу несколько ячеек (вставка, автозаполнение, очистка и т.д.)

Visual Basic
1
2
3
4
5
6
7
8
Private Sub Worksheet_Change(ByVal T As Range)
  On Error Resume Next
  Set T = Intersect(T, UsedRange)
  If T Is Nothing Then Exit Sub
  For Each T In T
    T.EntireColumn.Sort Cells(1, T.Column), xlAscending, Header:=xlYes
  Next
End Sub



1



5 / 5 / 1

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

Сообщений: 86

07.01.2017, 13:13

11

Казанский, Я не понял, что вы имели в виду совершенно
Вы готовый код запостили или какую-то заготовку?



0



15136 / 6410 / 1730

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

Сообщений: 9,999

07.01.2017, 14:18

12

dwell, код, который начинается «sub» и заканчивается «end sub», с большой вероятностью является готовым
Используйте его вместо того, который сработал.



1



5 / 5 / 1

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

Сообщений: 86

07.01.2017, 14:23

13

Казанский, тогда не работает



0



15136 / 6410 / 1730

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

Сообщений: 9,999

07.01.2017, 15:42

14

dwell, тогда приложите файл-пример и поясните, что должно происходить и при каких условиях.



1



5 / 5 / 1

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

Сообщений: 86

07.01.2017, 15:50

15

Вот файл. В одной колонке одни имена, во второй — другие. Я хочу, чтобы при добавлениях новых имен в каждую колонку имена сортировались по алфавиту.
Блин. Только что попробовал ваш код еще раз — РАБОТАЕТ!



0



0 / 0 / 0

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

Сообщений: 8

14.08.2018, 11:42

16

Добрый день!

Только начинаю погружаться в VBA, еще не все кумекаю
Подскажите, пожалуйста, как этот макрос запускать по кнопке?

понимаю, что это событие связано с изменениями на листе — в этом весь смак — но есть потребность именно по кнопке сортировать

Спасибо заранее!



0




Отсортируем формулами таблицу, состоящую из 2-х столбцов. Сортировку будем производить по одному из столбцов таблицы (решим 2 задачи: сортировка таблицы по числовому и сортировка по текстовому столбцу). Формулы сортировки настроим так, чтобы при добавлении новых данных в исходную таблицу, сортированная таблица изменялась динамически. Это позволит всегда иметь отсортированную таблицу без вмешательства пользователя. Также сделаем двухуровневую сортировку: сначала по числовому, затем (для повторяющихся чисел) — по текстовому столбцу.

Пусть имеется таблица, состоящая из 2-х столбцов. Один столбец – текстовый:

Список фруктов

; а второй — числовой

Объем Продаж

(см.

файл примера

).

Задача1 (Сортировка таблицы по числовому столбцу)

Необходимо отсортировать строки таблицы по содержимому числового столбца (по Объему продаж). Предполагается, что пользователь постоянно заполняет строки таблицы, поэтому необходимо написать формулы с учетом добавляемых значений.

Для наглядности величины значений в столбце

Объем Продаж

выделены с помощью

Условного форматирования

(

). Также желтым выделены повторяющиеся значения.


Примечание

: Задача сортировки отдельного столбца (списка) решена в статьях

Сортированный список (ТЕКСТовые значения)

и

Сортированный список (ЧИСЛОвые значения)

.

Решение1

Если числовой столбец гарантировано не содержит

повторяющихся

значений, то задача решается легко:

  • Числовой столбец отсортировать функцией

    НАИБОЛЬШИЙ()

    (см. статью

    Сортированный список (ЧИСЛОвые значения)

    );

  • Функцией

    ВПР()

    или связкой функций

    ИНДЕКС()+ПОИСКПОЗ()

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

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

ВПР()

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

Функция ВПР() в MS EXCEL

), то этот подход не годится (названия Фруктов будут выведены неправильно).

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

Создадим для удобства 2

Динамических диапазона

Фрукты

и

Продажи

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

В столбцах

D

и

E

разместим таблицу, которая будет динамически сортироваться,

В ячейке

Е7

запишем зубодробительную

формулу массива

:

=ИНДЕКС(Продажи; ОКРУГЛ(ОСТАТ(НАИБОЛЬШИЙ( —(СЧЁТЕСЛИ(Продажи;»<«&Продажи)&»,»&ПОВТОР(«0»;3-ДЛСТР(СТРОКА(Продажи)-СТРОКА($E$6)))&СТРОКА(Продажи)-СТРОКА($E$6)); СТРОКА()-СТРОКА($E$6));1)*1000;0) )

Данная формула сортирует столбец

Объем продаж

(динамический диапазон

Продажи

) по убыванию. Пропуски в исходной таблице не допускаются. Количество строк в исходной таблице должно быть меньше 1000.

Разберем формулу подробнее:

  • Формула

    СЧЁТЕСЛИ(Продажи;»<«&Продажи)

    возвращает массив {4:5:0:2:7:1:3:5}. Это означает, что число 64 (из ячейки

    B7

    исходной таблицы, т.е. первое число из диапазона

    Продажи

    ) больше 4-х значений из того же диапазона; число 74 (из ячейки

    B8

    исходной таблицы, т.е. второе число из диапазона

    Продажи

    ) больше 5-и значений из того же диапазона; следующее число 23 — самое маленькое (оно никого не больше) и т.д.
  • Теперь вышеуказанный массив целых чисел превратим в массив чисел с дробной частью, где в качестве дробной части будет содержаться номер позиции числа в массиве: {4,001:5,002:0,003:2,004:7,005:1,006:3,007:5,008}. Это реализовано выражением

    &»,»&ПОВТОР(«0»;3-ДЛСТР(СТРОКА(Продажи)-СТРОКА($E$6)))&СТРОКА(Продажи)-СТРОКА($E$6))

    Именно в этой части формулы заложено ограничение о не более 1000 строк в исходной таблице (см. выше). При желании его можно легко изменить, но это бессмысленно (см. ниже раздел о скорости вычислений).
  • Функция

    НАИБОЛЬШИЙ()

    сортирует вышеуказанный массив.
  • Функция

    ОСТАТ()

    возвращает дробную часть числа, представляющую собой номера позиций/1000, например 0,005.
  • Функция

    ОКРУГЛ()

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

    Объемы продаж,

    отсортированных по убыванию.
  • Функция

    ИНДЕКС()

    по номеру позиции возвращает соответствующее ему число.

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

Фрукты

=ИНДЕКС(Фрукты;ОКРУГЛ(…))

В

файле примера

, из-за соображений скорости вычислений (см. ниже), однотипная часть формулы, т.е. все, что внутри функции

ОКРУГЛ()

, вынесена в отдельный столбец

J

. Поэтому итоговые формулы в сортированной таблице выглядят так:

=ИНДЕКС(Фрукты;J7)

и

=ИНДЕКС(Продажи;J7)

Также, изменив в формуле массива функцию

НАИБОЛЬШИЙ()

на

НАИМЕНЬШИЙ()

получим сортировку по возрастанию.

Для наглядности, величины значений в столбце

Объем Продаж

выделены с помощью

Условного форматирования

(

). Как видно, сортировка работает.

Тестируем

Теперь добавим новую строку в исходную таблицу. В динамически сортируемых таблицах мы должны получить соответствующую сортировку.

1. В ячейку

А15

исходной таблицы введите слово

Морковь

; 2. В ячейку

В15

введите

Объем продаж

Моркови = 25; 3. После ввода значений, в столбцах

D

и

Е

автоматически будет отображена отсортированная по убыванию таблица; 4. В сортированной таблице новая строка будет отображена предпоследней.

Скорость вычислений формул

На «среднем» по производительности компьютере пересчет пары таких

формул массива,

расположенных в 100 строках, практически не заметен. Для таблиц с 300 строками время пересчета занимает 2-3 секунды, что вызывает неудобства. Либо необходимо отключить автоматический пересчет листа (

) и периодически нажимать клавишу

F9

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

Альтернативные подходы к сортировке таблиц

Отсортируем строки исходной таблицы с помощью стандартного фильтра (выделите заголовки исходной таблицы и нажмите

CTRL+SHIFT+L

). В выпадающем списке выберите требуемую сортировку.

Получим идентичный нашему вариант таблицы, но при добавлении в таблицу новых значений придется применять фильтр заново.

Также можно воспользоваться инструментом Сортировка (

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

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

При использовании

Таблиц в формате EXCEL2007

мы также не получим динамической сортировки. Новое значение (Картофель) останется последним в исходной таблице (до принудительной сортировки таблицы через фильтр), не смотря на его значение продаж (200).

Какой вариант предпочтительней — как всегда — выбирать разработчику.

Еще одна формула массива (+дополнительный столбец). Задача1.1

Сортировку таблицы можно сделать с помощью другой, более простой

формулы массива

, но нам понадобится дополнительный (служебный) столбец D (см.

файл примера лист Пример2

):

=

НАИБОЛЬШИЙ(ЕСЛИ(F7=$B$7:$B$14;СТРОКА($B$7:$B$14)-СТРОКА($B$6);0);СЧЁТЕСЛИ($F$7:$F$14;F7)-СЧЁТЕСЛИ($F$6:F6;F7))

В столбце F содержится отсортированный столбец В (объем продаж). Формула возвращает позицию значения объема продаж. Например, число 86 находится в 5-й строке таблицы.

Для повторов выражение

ЕСЛИ(F8=$B$7:$B$14;СТРОКА($B$7:$B$14)-СТРОКА($B$6);0)

будет возвращать несколько значений: {0:2:0:0:0:0:0:8}, т.е. число 74 находится в строках 2 и 8.

С помощью функции

НАИБОЛЬШИЙ()

сначала выводится 2, затем 8 (в разных строках).

Эта формула более наглядна, чем рассмотренная выше в начале статьи, но требует наличия дополнительного столбца.

Задача2 (Сортировка таблицы по текстовому столбцу)

Отсортируем строки таблицы по содержимому Текстового столбца (по Фруктам).


Примечание

: Про сортировку списка текстовых значений можно прочитать в статье

Сортированный список в MS EXCEL (ТЕКСТовые значения)

Как и в предыдущей задаче предположим, что в столбце, по которому ведется сортировка имеются повторы (названия Фруктов повторяются).

Для сортировки таблицы придется создать 2 служебных столбца (D и E).

В столбце D введем

формулу массива, возвращающую несколько значений

=

СЧЁТЕСЛИ($B$7:$B$14;»<«&$B$7:$B$14)+1

Эта формула является аналогом

ранга

для текстовых значений (позиция значения относительно других значений списка). Текстовому значению, расположенному ниже по алфавиту, соответствует больший «ранг». Например, значению Яблоки соответствует максимальный «ранг» 7 (с учетом повторов).

В столбце E введем обычную формулу:

=

СЧЁТЕСЛИ($D$6:D6;D7)+D7

Эта формула учитывает повторы текстовых значений и корректирует «ранг». Теперь разным значениям Яблоки соответствуют разные «ранги» — 7 и 8. Это позволяет вывести список сортированных значений. Для этого используйте формулу (столбец G):

=

ИНДЕКС($B$7:$B$14;ПОИСКПОЗ(СТРОКА()-СТРОКА($G$6);$E$7:$E$14;0))

Аналогичная формула выведет соответствующий объем продаж (столбец Н).

Задача 2.1 (Двухуровневая сортировка)

Теперь снова отсортируем исходную таблицу по Объему продаж. Но теперь для повторяющихся значений (в столбце А три значения 74), соответствующие значения выведем в алфавитном порядке.

Для этого воспользуемся результатами Задачи 1.1 и Задачи 2.

Подробности в

файле примера

на листе Задача2.

Сортировка в Excel формулой.

​Смотрите также​​: данные обновлять не​Файл не получилось​ ​ лист, туда формулу​​ срабатывал на странице?​​ (к примеру, в​ ​ я новичок, поэтому​​ что столбец «G»​ одном из форумов,​ ЧТО (A3:C11)​ между буквами и​ но я его​ помощь.​ сразу по нескольким​ Или в определенной​=ЕСЛИОШИБКА(ИНДЕКС(Фамилии;ПОИСКПОЗ(НАИМЕНЬШИЙ(СЧЁТЕСЛИ(Фамилии;» И формулу​ «НАИБОЛЬШИЙ». =НАИБОЛЬШИЙ(A:A;СТРОКА(A1))​Есть несколько способов​ формулой, а макросом.​ приложить, ну и​
​ например​ Поскольку идет импорт​ 3 и 40​ просьба не быть​
​ у меня формируется​
​ если найду, выложу,​ ​и сортируем сначала​
​ проч.​ не смог адаптировать​На всякий случай​
​ столбцам и строкам,​ последовательности — звание,​
​ протянуть вниз по​
​Второй способ​, как сделать сортировку​ и добавить сортировку.​ ладно… (Только нужно​=COUNTA(Лист1!A:S)​ данных извне и​ строках) — остальная​ слишком строгими ко​
​ на основании сложения​ но формулы там​ по Диапазону Название​
​Serge​​ к своему файлу​
​ опишу механику фильтрации​ ​ по нескольким условиям.​
​ чин, должность, название​ столбцу чуть ниже​.​ в​ и можно запускать​ первую таблицу сделать​В модуль этого​​ обновляются с периодичностью​ информация не должна​ мне. Вопрос следующий.​ и умножения других​ гигантские скажу сразу!​ (А3:А11)​: А почему не​ :(​
​ по значению, может​ Как настроить такую​
​ месяцев по порядку,​ последней строки таблицы.​Сортировка по алфавиту в​Excel​ кнопкой или сочетанием​ массивом «Таблица1»)​ листа код​ 5 минут. То​
​ попадать на новый​ У меня есть​ ячеек, и данный​ )​потом по Диапазону​ использовать сводную?​Возможно это както​ кто сделает проще.​ сортировку, смотрите в​ а не по​Если данные в​Excel.​. Для этого есть​
​ клавиш. Успехов!​upd​Private Sub Worksheet_Calculate()​ есть, чтобы макрос​
​ лист. Импорт данных​ некая информация преобразованная​ макрос автоматически произведёт​Excel-ok​ Столбец1 (В3:В11)​Григорий​ формулами сделать?​1)В таблицу с​ статье «Сортировка в​ алфавиту.​

excel-office.ru

Как настроить сортировку в Excel.

​ таблице не сортируются​​Если в столбце​функция в​Lelush​Получилось.​ Лист1.www End Sub​ для «Статистики» срабатывал​ из внешних источников​ в excel-файл. Необходимо​ сортировку только если​: Читать так:​Проверьте имена диапазонов​: Serge Для сводной​vikttur​
​ данными добавил столбец​
​ Excel по нескольким​Можно сделать любой​ по дате, значит​ стоят не числа,​Excel «Сортировка и фильтр».​: У меня есть​Как сделать автоматическую сортировку​Это в файл​ автоматически.​ (строк может быть​
​ отобрать нужные строки​ я зайду в​ЕСТЬ решение этой​ что были присвоены​ данные неудобные.​: Сортировка по тексту​ с нумерацией строк​ столбцам и строкам»​ список. У нас​ не правильно написаны​
​ а текст, например,​Как сортировать с​ столбец​

​ списка значений от​ Карена​Hugo​ любое количество -​​ и автоматически скопировать​​ любую ячейку G​ задачи и с​ и все должно​​Микки В макросе​ — по алфавиту​ (хотя можно было​ тут.​ есть такая таблица.​ все или некоторые​ фамилии, наименование товара,​ помощью этой функции,​​A​ минимального до максимального,​Можно аналогично и​Написать свои условия сортировки в Excel.​: А мне вариант​ главное, чтобы они​ их на отдельный​ и затем нажму​
​ помощью формул. Его​ работать​ выдает ошибку на​ или есть числовые​ и через «строку»​Таблицу Excel можно​Выделяем столбец. Заходим​ даты. Как правильно​ т.д., то используем​​ читайте в статье​
СДЕЛАТЬ СВОЙ СПИСОК ДЛЯ СОРТИРОВКИ В EXCEL.​с данными, который​ в котором эти​ мой код вызывать​ Карена нравится больше​ удовлетворяли требованиям по​ лист. Еще момент​ энтер. А хотелось​ KL приводил как-то​Private Sub Worksheet_Change(ByVal​ Range(«Что»).Select . Можно​
​ «вкрапления», как в​ пойти).​ защитить от других​ на закладке «Главная»​ сортировать по датам,​ формулу массива. Таблица​

excel-office.ru

Автоматическая сортировка списка

​ «Сортировка в Excel».​​ постоянно пополняется. Как​

​ значения появляются ДИНАМИЧНО.​
​ — только название​Если конечно всегда​ примеру 3 и​ — данные в​ бы без этого​

​ на одном из​
​ Target As Range)​ для особо непонятливых​ примере?​2)Данные из столбца​ пользователей, установив пароль.​ -> «Сортировка и​ смотрите в статье​ такая.​ Здесь рассмотрим, как​

​ мне сделать так,​ Подскажите пожалуйста формулу​ поменять.​ применим.​ 40 строк). Желаемый​ excel-файле периодически обновляются.​ лишнего движения, чтобы​ форумов, если найду,​’если изменения в​

​ (для меня :)​Григорий​

​ с нумерацией привязал​ Смотрите в статье​ фильтр», выбираем «​ «Сортировка по дате​
​Выделяем столбец и присваиваем​ настроить сортировку в​ чтобы в столбец​ или макрос. Главное​maxx13​Как сделать чтоб​
​ результат (как должно​ Файл прикрепляю. Уточняю,​ автоматически производилась сортировка.​
​ выложу, но формулы​ диапазоне A3:C11​ ) по пунктам​: Спасибо за участие​ к функции «наибольшее»​ «Пароль на Excel.​Настраиваемая сортировка​ в Excel».​ ему имя. Как​ Excel с помощью​R​ чтобы сортировка была​: Добрый день. подскажите,​ срабатывало на обновление​ быть) на Листе​ пользуюсь Ecxel 2003,​ +нужна сортировка не​
​ там гигантские скажу​If Not Intersect(Target,​ что там манять​ :)​

​3)К данным находящимся​​ Защита Excel».​». В появившемся окне​Сортировка в Excel​ это сделать, читайте​ формул. Эта сортировка​копировались записи из​

​ автоматической.​​ пожалуйста, возможен ли​ — зависит как​ 2.​ можно Excel 2007​ по возрастанию а​
​ сразу!​ Range(«A3:C11»)) Is Nothing​

​ при переносе надо​​В моем случае​ в столбце по​Григорий​ в разделе «Порядок»​проводится разными способами​

​ в статье «Присвоить​​ удобна тем, что​ столбца​

​Нужно просто отсортировать​ вариант, чтобы excel​ обновляете.​Hugo​Юрий М​
​ по убыванию.​
​)))​
​ Then​
​ (Кроме названия листов​

​ будут числовые вкропления,​​ которому необходима фильтрация​: Всем здравствуйте.​ выбираем «Настраиваемый список».​ — функцией «Сортировка»,​

​ имя в Excel​​ при изменении данных​A​ по занятому месту​
​ автоматом подставлял из​Можно на третьем​: Фильтр в T​: roadtomoney, Вам, как​_Boroda_​Guest​
​’если выделили больше​ и диапазонов). Меняю​ при этом колличество​ прибавил данные из​Описание:​В разделе окна «Списки»​ формулами, т.д. Но​

​ ячейке, диапазону, формуле»​​ в столбце, произойдет​и тут же​

​ список имён.​​ таблицы 1 (выделена​ листе прописать формулу,​

​ — выбираем «Статистика»,​ новичку, скажу по​: Так нужно?​:​ одной ячейке, то​ и в самом​ буквенных и числовых​ столбца нумерации деленные​Есть таблица в​ появится запись «Новый​ можно настроить сортировку​ тут. Мы присвоили​ автоматическая сортировка в​

​ сортировались по возрастанию?​Имя1 (столбец1) -​ красным цветом) в​ завязанную на первый,​

​ копируем. Можно вручную,​​ секрету: мало кто​Private Sub Worksheet_Change(ByVal Target​

​Микки​ выход​ листе и в​

​ знаков может различаться.​​ на 1 000​ которой могут появляться​ список», выделяем его.​

​ по своим условиям.​​ имя «Фамилии».​
​ Excel новых данных.​ То есть я​ 4 место (столбец2)​
​ нужные сроки таблицы​ и по событию​ можно маросом.​
​ захочет возиться с​ As Range)​
​: Я таки не​If Selection.Cells.Count >​ модуле.​
​Например​ 000 000 :)​
​ и исчезать данные​ Переходим в правую​ Как сортировать функцией,​В ячейке В1​

​Рассмотрим два способа​ добавляю новую запись​
​Имя2 — 2​ 2 (выделена желтым).​
​ пересчёта запускать макрос.​roadtomoney​ файлом в 510К.​
​On Error Resume​ понимаю , чем​ 1 Then Exit​
​vikttur Можешь показать​МО1​ таким образом в​
​ (прям волшебная какая-то​
​ часть диалогового окна​
​ читайте в статье​
​ пишем такую формулу.​
​ сортировки данных в​
​ в​

​ место​
​BobroEJ​
​Но не вполне​
​: Можно немного подробнее,​
​ Ведь можно же​
​ Next​
​ мой вариант плох?​
​ Sub​

​ как по первым​
​МГБ12​

​ случае появлении в​​ таблица :)).​ и пишем наш​ «Сортировка в Excel».​=ИНДЕКС(Фамилии;ПОИСКПОЗ(НАИМЕНЬШИЙ(СЧЁТЕСЛИ(Фамилии;» Для ввода​ таблице Excel с​A​Имя3 — 1​: maxx13, вы там​ понятно — куда​

​ пожалуйста. Как будет​​ делать пример не​

​With Me​ Прекрасно работает сделайте​Range(«Что»).Select​ 3м буквам? Я​и т.д.​ таблице одинаковых значений​Задача:​ список через запятую.​ Как настроить автоматическую​

​ формулы нажимаем сочетание​

​ помощью формул.​​и в столбце​

​ место​​ что-то забыли приложить.​ копировать? Всегда в​ выглядеть макрос?​ на​r1_ = .UsedRange.Rows.Count​ динамические диапазоны и​’ActiveWorkbook.Worksheets(«Лист1»).Sort.SortFields.Clear​ д​

planetaexcel.ru

Автоматическая сортировка в Excel (Формулы/Formulas)

​Микки​​ (а у меня​

​Так вот необходимо​ Получилось так.​
​ сортировку в помощью​ клавиш «Ctrl» +​
​Первый способ.​R​Имя4 - 3​
​maxx13​
​ A1?​
​Hugo​
​такое​
​If Not Intersect(Target,​
​ не парьтесь или​

​ActiveWorkbook.Worksheets(«Лист1»).Sort.SortFields.Add Key:=Range(«Название»), _​Serge​: Интересно почему не​ они целые) формула​ настроить автоматическую сортировку​Нажимаем кнопку «Добавить» наш​ формул, смотрите в​ «Shift» + «Enter»,​Сортировка в​уже обновлённый отсортированный​ место.​: сори​roadtomoney​: Sub tt() With​количество строк. Да​ Range(«D1:F» & r1_))​ засадите макрос на​SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal​

​: {quote}{login=Григорий}{date=03.09.2009 03:13}{thema=}{post}Serge Для​​ смогли ? Что​
​ все равно получало​ по тексту а​
​ список появился в​ статье "Сортировка в​
​ п.ч. это формула​
​Excel по возрастанию.​
​ список.​Полосатый жираф алик​buchlotnik​
​: Копирование на соседний​
​ Sheets(1) If .AutoFilterMode​
​ и какие строки​ Is Nothing Then​
​ кнопочку​
​ActiveWorkbook.Worksheets("Лист1").Sort.SortFields.Add Key:=Range("Столбец1"), _​
​ сводной данные неудобные.​ Вам так сильно​
​ сове наибольшее с​
​ после по значению.​
​ левой стороне окна.​
​ Excel формулой" здесь.​
​ массива. Копируем формулу​

excelworld.ru

Автоматическая сортировка и копирование строк в excel

​Сортируем с помощью​​Ещё есть такой​: На том же​: так нужно?​ лист, всегда в​ Then .AutoFilter.Range.AutoFilter End​ считать «нужными» -​With .Sort.SortFields​stalber​SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal​Прикольно, я ещё​ мешает?​ небольшой погрешностью которая​ С настройкой отдельно​Нажимаем «ОК». Здесь же​Сортировка списка в Excel.​ вниз по столбцу.​ функций «НАИМЕНЬШИЙ» или​ нюанс: в этих​

​ месте — формулой​​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИОШИБКА(ИНДЕКС(D$90:D$108;ПОИСКПОЗ($C17;$C$90:$C$108;0));»»)​ A1 Вопрос в​ With With Sheets(1).UsedRange.Columns(20)​ пока только Вы​.Clear​: Использую данный код:​With ActiveWorkbook.Worksheets(«Лист1»).Sort​ не встречал неудобных​​vikttur​​ потом округлялась и​ по значению проблем​ можно удалить ненужный​Таблица Excel сортирует​ Получилось так.​ «НАИБОЛЬШИЙ».​ столбцах строка 1​ не получится. А​

​_Boroda_​​ том, что на​

​ .AutoFilter Field:=1, Criteria1:=»Статистика»​​ знаете. Как должен​.Add Key:=Range(«G1:G» &​Private Sub Worksheet_Change(ByVal​.SetRange Range(«Что»)​ данных ;)​: Вопрос был в​ как следствие исчезала.​ нет — использую​ список, предварительно выделив​ данные по определенным​Если предполагается добавлять​В ячейке В5 пишем​ обычная, а начиная​ в другом столбце​: Еще вариант​ первом листе данные​ .SpecialCells(xlCellTypeVisible).EntireRow.Copy Sheets(2).[a1] End​ выглядеть желаемый результат​ r1_), Order:=xlDescending​ Target As Range)​.Header = xlYes​прохожий​ следующем — как​

​4)Ну а дальше​​ функцию «наибольший» а​ его.​ спискам. Мы можем​ строки в таблицу,​

​ такую формулу. =НАИМЕНЬШИЙ(A:A;СТРОКА(A1))​​ со второй и​ — запросто. Заодно,​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=СУММПРОИЗВ(($C17=$C$90:$C$108)*D$90:D$108)​

​ динамические и меняются​​ With Sheets(1).AutoFilter.Range.AutoFilter End​ — тоже никто​End With​On Error Resume​.MatchCase = False​: А почему именно​ сортировать?​ комбинацией Индекс(Поискпоз вытаскивал​

​ вот с текстом…..​​Теперь сортируем так:​

​ сами создать свои​​ то можно сделать​Обратите внимание!​ далее идёт группировка​ а по какой​:)​И формат ячеек​ автоматически каждые 5​ Sub​ не знает…​With .Sort​ Next​.Orientation = xlTopToBottom​ автоматическая? А нажатием​По алфавиту можно,​ в новую таблицу​Т.е. при обновлении​

​ «Сортировка и фильтр»​​ списки, по которым,​ динамический диапазон столбца​:)
​Хотя первая ячейка​ по 2 ячейки.​
​ формуле считаются места?​# ##0,00;;​ минут, а макрос​k61​
​roadtomoney​.SetRange Range(«D1:G» &​If Not Intersect(Target,​.SortMethod = xlPinYin​ кнопки сложно?​
​ но формулами по​ необходимые мне данные​ данных, в итоговой​ -> «Настраиваемая сортировка»​

​ затем, будем сортировать​​ А. Смотрите статью​ для сортировки находится​kalbasiatka​Alex​maxx13​ для обновления статистики​: …​: Спасибо. Сейчас исправлюсь)​ r1_)​ Range(«G:G»)) Is Nothing​.Apply​Микки​ первым одной-двум буквам,​Микки​

​ таблице данные должны​​ -> выбираем в​ данные. Эти списки​ «Чтобы размер таблицы​ в пятой строке​
​: Добавить и отсортировать.​
​: Копай в сторону​: да, спасибо огромное.​
​ приходится запускать вручную.​roadtomoney​
​roadtomoney​.Apply​:)
​ Then​End With​: Объясняю​ далее усложнение. А​

planetaexcel.ru

Автоматическая сортировка (Формулы/Formulas)

​: Добавил Вам автосортировку​​ выстроиться в алфавитном​ разделе «Порядок» диалогового​ будут работать и​ Excel менялся автоматически».​ таблицы (А5), в​ А лучше к​ условного форматирования. Сортировку​ уже проще от​

​ Можно сделать так,​​: Спасибо большое. Все​: Прикладываю новый файл.​

​End With​​Range(«G1»).Sort Key1:=Range(«G1»), _​

​End If​​Используются 3 именованных​​ если имеется текст​

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

​ формуле пишем ячейку​​ своим темам файл​ не сделает, но​ 200 органов такое​ чтобы макрос запускался​ работает!!! Столько по​

​ Проблема описана в​​End If​​Order1:=xlAscending, Header:=xlYes, _​
​End Sub​ диапазона на Листе​ с тремя-пятью одинаковыми?​ в 1 или​ сортировкой (в случае​
​ Выделяем его, нажимаем​​ Excel.​

excelworld.ru

Автоматическая сортировка в excel 2010 ?

​ в столбце В​ А1. Копируем ячейку​ прикреплять (для наглядности​ хотя бы цветом​ свести 2 разных​ автоматически вместе с​ интернету бродил…HUGO -​ нем снизу) Суть​End With​

​OrderCustom:=1, MatchCase:=False, _​Excel-ok​ 1 (строго)​
​По числам (цифрам)​ 2 столбце, хотя​
​ появления одинаковых названий)​ «ОК», ещё раз​
​Например, нам нужно​ нужно будет чуть​
​ вниз по столбцу.​ примера), чтобы не​

​ пометить можно при​​ файла​ обновлением первого листа?​ ты лучший​ проблемы в том,​End Sub​Orientation:=xlTopToBottom​: Если решение этой​

​Если изменилось что​​ тоже можно, но​ имена лучше динамические​ по данным в​ «ОК».​ рассортировать данные магазина​ дополнить функцией. Формулу​ Получилось так.​

​ гадали люди в​​ тех или иных​BobroEJ​Hugo​Можно еще один​ что необходимо, чтобы​roadtomoney​

Автоматическая сортировка

​End If​​ задачи с помощью​ либо в диапазоне​​ нужно знать некоторые​​ но писать лень​ таблице.​Получилось так.​ по отделам (фамилии​​ в ячейке В1​​В столбце С установили​ какой плоскости у​​ условиях.​​:​: Так ведь уже​ вопрос… Как сделать,​ копировались именно строки​: Здравствуйте, уважаемые форумчане.​​End Sub​​ формул. Его KL​​ A3:C11​​ подробности — размещение,​Гигорий​
​Буду благодарен за​В Excel можно сортировать​ сотрудников, товар, др.).​ напишем такую.​ формулу с функцией​ вас группировка ячеек.​Шведов сергей​

​200?’200px’:»+(this.scrollHeight+5)+’px’);»>=ЕСЛИ(ЕОШИБКА(ИНДЕКС(Таблица1;ПОИСКПОЗ($C17;ИНДЕКС(Таблица1;;1);0);D$16-3));»»;ИНДЕКС(Таблица1;ПОИСКПОЗ($C17;ИНДЕКС(Таблица1;;1);0);D$16-3))​​ написал — добавляете​ чтобы макрос автоматически​ с информацией, как​ В последующем вопросе​Неудобство в том,​ приводил как-то на​то выделяем диапазон​ наличие цифровых знаков​

CyberForum.ru

​: Спасибо за макрос,​

Понравилась статья? Поделить с друзьями:
  • Excel макрос автозамена текста
  • Excel макрос with только значения
  • Excel макрос vba парсинг реквизитов организации инн
  • Excel макрос sql запрос
  • Excel макрос if с несколькими условиями