EvaAleks Пользователь Сообщений: 28 |
Добрый день. Прикрепленные файлы
|
Kuzmich Пользователь Сообщений: 7998 |
#2 08.09.2021 17:56:46
|
||
EvaAleks Пользователь Сообщений: 28 |
#3 08.09.2021 22:34:05 Не могу понять (( В Пример2 нужно сортировать по желтой колонке 3 разных диапазона (выделила их рамкой и цветом).
Прикрепленные файлы
Изменено: vikttur — 09.09.2021 00:27:01 |
||
Kuzmich Пользователь Сообщений: 7998 |
#4 08.09.2021 22:50:20 EvaAleks,
Эта команда ищет последнюю строку в столбце F (=82) |
||
New Пользователь Сообщений: 4582 |
|
EvaAleks Пользователь Сообщений: 28 |
Kuzmich, что исправить чтобы сортировал только выделенный диапазон? И потом при выделении другого диапазона так же не трогал другие области? Изменено: EvaAleks — 09.09.2021 09:03:58 |
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#7 09.09.2021 09:15:53
видимо, как-то так:
Изменено: Дмитрий(The_Prist) Щербаков — 09.09.2021 09:17:37 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
EvaAleks Пользователь Сообщений: 28 |
Дмитрий(The_Prist) Щербаков, вообще не ясно что он сортирует. Цифры в желтой колонке не по убыванию. И захватываются данные по всем диапазону B:F |
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#9 09.09.2021 09:56:38
вообще не ясно что Вы выделяете и что в колонках B:F. Вы вроде как просили:
код именно это и делает: сортирует только выделенный диапазон и только по третьему столбцу. Может надо что-то другое и Вы забыли нам об этом сообщить? Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
EvaAleks, Программисты — это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете! |
|
EvaAleks Пользователь Сообщений: 28 |
У меня большая таблица размером A1:CD3219 (эти размеры могут меняться по числу строк), состоящая из небольших диапазонов внутри которых нужна сортировка по убыванию по определенной колонке. В файле Пример2 часть этой таблицы из трех диапазонов и меньшим числом колонок. Каждый диапазон (в файле я выделила жирной рамкой и тремя разными цветами) я выделяю вручную, т.к. количество строк разное. В Примере я выделяю сначала диапазон B3:F28 и сортирую по колонке F; затем выделяю диапазон B30:F55 и опять сортирую по колонке F; выделяю диапазон B57:F82 и опять сортирую по колонке F. А макрос сортирует в рамках B1:F82. Это не правильно в моем случае. |
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#12 09.09.2021 10:27:20
какой именно? Почему я в Вашем файле выделяю диапазон А1:С17 -запускаю свой макрос и он сортирует мне только диапазон А1:С17? Т.е. именно(и только!) тот, который я выделил до запуска кода.
а колонка F в диапазоне B1:F82 никак не 3-я по счету. Определитесь с критериями и с задачей в целом. Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
EvaAleks Пользователь Сообщений: 28 |
Дмитрий(The_Prist) Щербаков, у меня приложено 2 файла. В первом — Пример.xlsx только один диапазон и 3 колонки. Ниже в посте я выложила другой файл — Пример2.xlsx . В первом случае макрос работает, во втором случае нет. Поэтому и спросила как исправить макрос, чтобы он работал на другом количестве колонок и при выделении диапазонов ниже. |
RAN Пользователь Сообщений: 7091 |
#14 09.09.2021 11:00:10 Вангую.
|
||
Дмитрий(The_Prist) Щербаков Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#15 09.09.2021 11:00:33
и опять не верно. Напишите подробнее что делаете и что ожидаете в итоге. Только что проверил на втором файле — выделил диапазон B3:F28, запустил свой код — диапазон отсортировался по столбцу D, как и было в изначальной задаче(т.е. третий столбец выделенного диапазона). Выделил B30:F55 — запустил — тоже отсортировался только выделенный диапазон и только по третьему столбцу выделенного диапазона.
где Вы это написали и где указали, как это должно работать? Выделили Вы диапазон A1:CD3219 — по какой должен сортировать макрос? Вы написали только это:
неплохо бы еще и указать, как понять какая это колонка. Как определить ту, по которой сортировать? Действительно ли она всегда последняя, как попробовали угадать в сообщении выше?
ох, неблагодарное это занятие Но похоже на правду. Но тут же важно понимать, нужны ли заголовки, реально ли именно по последнему выделенному столбцу надо сортировать…А нам об этом не сильно-то рассказывают. Изменено: Дмитрий(The_Prist) Щербаков — 09.09.2021 11:10:04 Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||||
RAN Пользователь Сообщений: 7091 |
#16 09.09.2021 11:16:57 Или даже так
|
||
EvaAleks Пользователь Сообщений: 28 |
RAN, заработало!!!! ))) только каждый раз спрашивает по какому столбцу сортировать |
RAN Пользователь Сообщений: 7091 |
Sub Vanga() не спрашивает. |
EvaAleks Пользователь Сообщений: 28 |
RAN, а если понадобится отсортировать через Vanga допустим по 11 колонке, он сработает? |
Неопытный_Экселист Пользователь Сообщений: 178 |
#20 09.09.2021 12:54:40
А что мешает использовать два макроса: Vanga для просто сортировки и Vanga_2, если надо отсортировать по конкретному столбцу (например по 11-му)? |
||
EvaAleks Пользователь Сообщений: 28 |
Просто каждый раз указывать номер нужной колонки? |
EvaAleks, |
|
EvaAleks Пользователь Сообщений: 28 |
#23 09.09.2021 13:05:57 Просто уточняю, правильно лия поняла ))) Спасибо огромное. Слишком много времени прошло с того момента как я записывала и редактировала макросы. А сейчас уже не соображаю, где косячу. |
Сортировка данных в таблице на рабочем листе 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) не нарушает сортировку первого – в первом столбце меняются местами только ячейки с одинаковыми значениями.
сортировка выделенного диапазона макросом |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
||||||||
Ответить |
This Excel macro sorts data that has headers in descending order. This means that data is sorted Z to A and 10 to 1 — or reverse alphabetical order and highest to lowest. This macro also assumes that there is one row of headers at the top of your data set or data range. If you have more than one row of headers on your data, simply make the range reference to the entire table start one row below the top header row — this will take into account two rows for headers.
This is a great and simple sorting macro in Excel and will help to get you started or will fit nicely into existing macros that you have.
To use this macro, simply replace A1:C56 with the range reference of your entire data set or data table that you want to be sorted and then replace A1 with the cell reference of the row that you would like to sort the rest of the data by in descending order.
Where to install the macro: Module
Excel Macro to Sort Data With Headers in Descending Order
Sub Sort_Descending_Basic_With_Header()
'Sorts a worksheet in descending order and assumes there are headers on the data
Range("A1:C56").Sort Key1:=Range("A1"), Order1:=xlDescending, Header:=xlYes
End Sub
Excel VBA Course — From Beginner to Expert
200+ Video Lessons
50+ Hours of Instruction
200+ Excel Guides
Become a master of VBA and Macros in Excel and learn how to automate all of your tasks in Excel with this online course. (No VBA experience required.)
View Course
Similar Content on TeachExcel
Sort Data With Headers in Ascending Order in Excel
Macro: Macro that sorts data that has headers in ascending order in Excel. This macro assumes tha…
Filter and Sort Data on Charts in Excel
Tutorial: Create a dynamic chart in Excel that displays only the data you want. You can filter it an…
Sort Worksheet Tabs — Ascending or Descending Order
Macro: This macro will sort all of the worksheets in the current workbook. It can sort in ascendi…
Highlight, Sort, and Group the Top and Bottom Performers in a List in Excel
Tutorial:
How to highlight the rows of the top and bottom performers in a list of data.
This allows…
Loop through a Range of Cells in a UDF in Excel
Tutorial:
How to loop through a range of cells in a UDF, User Defined Function, in Excel. This is …
Option Buttons with Formulas in Excel
Tutorial:
How to make Excel option buttons in a worksheet that are linked to formulas and functions…
How to Install the Macro
- Select and copy the text from within the grey box above.
- Open the Microsoft Excel file in which you would like the Macro to function.
- Press «Alt + F11» — This will open the Visual Basic Editor — Works for all Excel Versions.
Or For other ways to get there, Click Here. - On the new window that opens up, go to the left side where the vertical pane is located. Locate your Excel file; it will be called VBAProject (YOUR FILE’S NAME HERE) and click this.
- If the Macro goes in a Module, Click Here, otherwise continue to Step 8.
- If the Macro goes in the Workbook or ThisWorkbook, Click Here, otherwise continue to Step 8.
- If the Macro goes in the Worksheet Code, Click Here, otherwise continue to Step 8.
- Close the Microsoft Visual Basic Editor window and save the Excel file. When you close the Visual Basic Editor window, the regular Excel window will not close.
- You are now ready to run the macro.
Spectator7675 0 / 0 / 0 Регистрация: 02.01.2015 Сообщений: 7 |
||||
1 |
||||
Сортировка столбца по убыванию02.01.2015, 12:19. Показов 7733. Ответов 13 Метки нет (Все метки)
Наверняка платиновый вопрос и если покопаюсь по форуму, то найду, но все же создам отдельную тему, ибо голова болит. Суть — есть один жадный алгоритм Хаффмана и столбец из 50 элементов, который содержит вероятности появления символов. Соответственно должна получится треугольная таблица из 50 столбцов, в последнем из которых одна строка равная единице. Но это все лирика. Вот, что я написал
Соответственно мне еще необходимо отсортировать следующий столбец по убыванию. Быстрый поиск по гуглу ничего особого не дал, поэтому и спрашиваю, уж простите. Бонусный вопрос — есть ли возможность в Экселе как-то графически соеденить ячейки ПРОГРАММНО (то есть не просто вручную нарисовать линию)?
0 |
Заблокирован |
||||||||
02.01.2015, 13:47 |
2 |
|||||||
Сообщение было отмечено Spectator7675 как решение Решение
Добавлено через 17 минут
1 |
0 / 0 / 0 Регистрация: 02.01.2015 Сообщений: 7 |
|
02.01.2015, 14:14 [ТС] |
3 |
Спасибо, я примерно понял, осталось доразобраться как работает функция .sort, ну с этим я расправлюсь как окончательно проснусь. И все же, никак ячейки в экселе программно не связать стрелочками? Мне же эту таблицу потом разматывать в обратном направлении.
0 |
Заблокирован |
||||
02.01.2015, 16:08 |
4 |
|||
Сообщение было отмечено Spectator7675 как решение Решениевот:
1 |
0 / 0 / 0 Регистрация: 02.01.2015 Сообщений: 7 |
|
02.01.2015, 18:53 [ТС] |
5 |
Спасибо, я все понял. Добавлено через 2 часа 36 минут
0 |
Заблокирован |
||||||||||||
02.01.2015, 19:12 |
6 |
|||||||||||
Да очень просто, найдите у меня это место, впишите следущее:
и будет синий цвет Добавлено через 2 минуты
Добавлено через 7 минут Application.EnableEvents = False а по окончанию опять включить: Application.EnableEvents = True Добавлено через 6 минут Кликните здесь для просмотра всего текста
1 |
Spectator7675 0 / 0 / 0 Регистрация: 02.01.2015 Сообщений: 7 |
||||||||
02.01.2015, 19:53 [ТС] |
7 |
|||||||
Еще раз спасибо! Добавлено через 39 минут
строке у вас [a:a] — рейндж по столбцам (то есть берется столбец А), .Sort вызов процедуры сортировки, .[a1] начальная ячейка, ну с xlDescending все понятно.
Думаю где должна быть сортировка i+1 столбца и так ясно .
0 |
Заблокирован |
||||
02.01.2015, 20:20 |
8 |
|||
Cells ( [номер строки], [номер столбца] можно вполне изменить на эту или на эту, значение i должно быть номером сортируемого столбца Добавлено через 6 минут Добавлено через 4 минуты
получится тоже что и [a1].select
0 |
0 / 0 / 0 Регистрация: 02.01.2015 Сообщений: 7 |
|
02.01.2015, 20:25 [ТС] |
9 |
Спасибо, так гораздо понятнее. Мне еще много костылей придется в программу вставить, но думаю с остальным я сам справлюсь .
0 |
Заблокирован |
|
02.01.2015, 20:29 |
10 |
но думаю с остальным я сам справлюсь зря вы так уверенны, я хоть все эти мелочи и знаю, но всёравно нет-нет да подсмотрю как делают другие, еще не спрашивал ничего, но скоро обязательно спрошу
0 |
Spectator7675 0 / 0 / 0 Регистрация: 02.01.2015 Сообщений: 7 |
||||
02.01.2015, 22:07 [ТС] |
11 |
|||
Да уж, тут вы были правы. В общем вот такая программа у меня получилась
Выдает ошибку 1004 «невозможно получить свойство sort класса range». Второй столбец строит верно, но не сортирует. Не подскажете в чем дело? Добавлено через 6 минут
0 |
Заблокирован |
|
03.01.2015, 02:26 |
12 |
в 10-й строчке точку у вас не надо ставить ( .Cells )
0 |
0 / 0 / 0 Регистрация: 02.01.2015 Сообщений: 7 |
|
03.01.2015, 13:53 [ТС] |
13 |
В общем-то построение таблицы-то у меня получилось, но коды по ней вручную построишь . Ну то есть можно, но я не настолько сошел с ума. Впрочем преподу это и не нужно, достаточно воспользоваться онлайн калькулятором и просто записать результат в отчет лабы, но так ведь не интересно, верно ? Поэтому у меня появилось идея, как при помощи трех рекурсивных функций из этой таблицы построить код Хаффмана для каждого символа, единственная проблема — я не знаю как сделать так, чтобы функция брала данные из одного листа эксель, а результат записывала в другой.
0 |
Заблокирован |
|
03.01.2015, 14:00 |
14 |
В общем-то построение таблицы-то у меня получилось, но коды по ней вручную построишь Да всё можно решить
я не знаю как сделать так, чтобы функция брала данные из одного листа эксель, а результат записывала в другой и это тоже можно
0 |