Массив по убыванию excel

Excel для Microsoft 365 Excel для Microsoft 365 для Mac Excel для Интернета Excel 2021 Excel 2021 для Mac Excel для iPad Excel для iPhone Excel для планшетов с Android Excel для телефонов с Android Еще…Меньше

Функция СОРТ сортирует содержимое диапазона или массива. 

В этом примере используется отдельная сортировка по регионам, продавцам и продуктам с помощью формулы =СОРТ(A2:А17), скопированной в ячейки F2, H2 и J2.

Использование функции СОРТ для сортировки диапазонов данных. В этом примере используется формула =СОРТ(A2:A17) для сортировки регионов, которая затем копируется в ячейки H2 и J2, чтобы отсортировать имена продавцов и продукты.

Функция СОРТ возвращает отсортированный массив элементов в массиве. Возвращаемый массив имеет ту же форму, что и предоставленный аргумент массива. 

=СОРТ(массив;[индекс_сортировки];[порядок_сортировки];[по_столбцу])

Аргумент

Описание

массив

Обязательный

Диапазон или массив для сортировки

[индекс_сортировки]

Необязательный 

Число, указывающее строку или столбец, по которым нужно выполнить сортировку.

[порядок_сортировки]

Необязательный

Число, указывающее нужный порядок сортировки: 1 для сортировки по возрастанию (по умолчанию), -1 для сортировки по убыванию

[по_столбцу]

Необязательный

Логическое значение, указывающее нужное направление сортировки: ЛОЖЬ для сортировки по строкам (по умолчанию), ИСТИНА для сортировки по столбцам

Примечания: 

  • Если аргумент «индекс_сортировки» не указан, предполагается строка 1 или столбец 1. Если не указан порядок сортировки, применяется сортировка по возрастанию. По умолчанию Excel выполняет сортировку по строкам, а сортировка по столбцам применяется, если аргументу «по_столбцу» присвоено значение ИСТИНА. Если аргументу «по_столбцу» присвоено значение ЛОЖЬ или он отсутствует, Excel выполняет сортировку по строкам.

  • Функция СОРТ предназначена для сортировки данных в массиве. Если вы хотите отсортировать данные в сетке, лучше использовать функцию СОРТПО, поскольку она удобнее. Функция СОРТПО учитывает добавления или удаления столбцов, так как она ссылается на диапазон, а функция СОРТ ссылается на номер индекса столбца.

  • Массив может рассматриваться как строка со значениями, столбец со значениями или комбинация строк и столбцов со значениями. В приведенном выше примере исходным массивом для формулы СОРТ является диапазон A5:D20.

  • Функция СОРТ возвращает массив, который будет рассеиваться, если это будет конечным результатом формулы. Это означает, что Excel будет динамически создавать соответствующий по размеру диапазон массива при нажатии клавиши Enter. Если ваши вспомогательные данные хранятся в таблице Excel, тогда массив будет автоматически изменять размер при добавлении и удалении данных из диапазона массива, если вы используете Структурированные ссылки. Дополнительные сведения см. в статье Поведение рассеянного массива.

  • Приложение Excel ограничило поддержку динамических массивов в операциях между книгами, и этот сценарий поддерживается, только если открыты обе книги. Если закрыть исходную книгу, все связанные формулы динамического массива вернут ошибку #ССЫЛКА! после обновления.

Примеры

Сортировка диапазона значений по убыванию.

Сортировка диапазона значений по убыванию.

Совместное использование функций СОРТ и ФИЛЬТР, чтобы отсортировать диапазон по возрастанию и ограничить его значениями, превышающими 5000.

Совместное использование функций СОРТ и ФИЛЬТР, чтобы отсортировать диапазон по возрастанию и ограничить его значениями, превышающими 5000.

Дополнительные сведения

Вы всегда можете задать вопрос специалисту Excel Tech Community или попросить помощи в сообществе Answers community.

См. также

Функция ФИЛЬТР

Функция СЛУЧМАССИВ

Функция ПОСЛЕДОВ

Функция СОРТПО

Функция УНИК

Ошибки #ПЕРЕНОС! в Excel

Динамические массивы и поведение массива с переносом

Оператор неявного пересечения: @

Нужна дополнительная помощь?

Сортировка одномерного массива в VBA Excel по возрастанию или убыванию с числовым или текстовым сравнением числовых элементов. Сортировка выбором.

Сортировка массива выбором

Функция, осуществляющая сортировку выбором одномерного массива по возрастанию с числовым сравнением числовых элементов массива:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

Function SortArray(myArray As Variant) As Variant

Dim l As Long, u As Long, i1 As Long, i2 As Long, im As Long, tmp As Variant

‘Определение наименьшего индекса массива

l = LBound(myArray)

‘Определение наибольшего индекса массива

u = UBound(myArray)

    For i1 = l To u

        im = i1

        For i2 = i1 To u

            ‘Поиск наименьшего элемента массива, начиная с элемента myArray(i1)

            If myArray(i2) < myArray(im) Then im = i2

        Next

        ‘Если наименьший элемент не является текущим (im <> i1),

        ‘тогда наименьший элемент и текущий меняются местами

        If im <> i1 Then

            tmp = myArray(i1)

            myArray(i1) = myArray(im)

            myArray(im) = tmp

        End If

    Next

SortArray = myArray

End Function

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

Функция с выбором вида сортировки

Функция сортировки одномерного массива с дополнительным параметром mySort, который позволяет выбрать сортировку по возрастанию или убыванию и с числовым или текстовым сравнением числовых элементов массива:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

Function SortArrayNew(myArray As Variant, mySort As Long) As Variant

Dim l As Long, u As Long, i1 As Long, i2 As Long, im As Long, tmp As Variant

l = LBound(myArray)

u = UBound(myArray)

    For i1 = l To u

        im = i1

            For i2 = i1 To u

                Select Case mySort

                    Case Is = 0

                        If myArray(i2) < myArray(im) Then im = i2

                    Case Is = 1

                        If CStr(myArray(i2)) < CStr(myArray(im)) Then im = i2

                    Case Is = 2

                        If myArray(i2) > myArray(im) Then im = i2

                    Case Is = 3

                        If CStr(myArray(i2)) > CStr(myArray(im)) Then im = i2

                End Select

            Next

        If im <> i1 Then

            tmp = myArray(i1)

            myArray(i1) = myArray(im)

            myArray(im) = tmp

        End If

    Next

SortArrayNew = myArray

End Function

Значения, которые может принимать параметр mySort:

Значение Вид сортировки
0 по возрастанию с числовым сравнением чисел
1 по возрастанию с текстовым сравнением чисел
2 по убыванию с числовым сравнением чисел
3 по убыванию с текстовым сравнением чисел

Пример сортировки массива

Пример использования разных видов сортировки одномерного массива в VBA Excel с выводом результатов на рабочий лист:

Sub Primer()

Dim myArr As Variant, x As Variant, i As Long, n As Long

    For i = 1 To 4

        myArr = Array(46, 25, «Лето», 508, 35, «лес», 11, 5, «25ф», «Лес», 45, 58, «лето», 350)

                myArr = SortArrayNew(myArr, i 1)

        n = 1

            For Each x In myArr

                Cells(n, i) = myArr(n 1)

                n = n + 1

            Next

    Next

End Sub

Результаты разных видов сортировки массива myArr:

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

Вариант 1: Быстрая сортировка в Excel

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

  1. Выделите зажатой левой кнопкой мыши столбец с данными и вызовите меню «Редактирование».Выделение диапазона для сортировки данных в Microsoft Excel

  2. Откройте список «Сортировка и фильтр» и выберите подходящий для вас вариант упорядочения. С числами это по возрастанию или убыванию, а для текста – по алфавиту и в обратную сторону.Выбор быстрой кнопки для сортировки данных в Microsoft Excel

  3. Если вы выделили не все ячейки в столбце, появится окно с предложением расширить диапазон. Сделайте это, если за пределами выделения тоже находятся значения, которые нужно сортировать. Укажите сортировку в пределах данного диапазона, если за ним находятся исключительно заголовки.Выбор расширения или сохранения диапазона для сортировки данных в Microsoft Excel

  4. Изменения вступают в силу сразу же. Нажмите Ctrl + Z для отмены действия, если что-то выполнено неправильно.Результат применения кнопок для сортировки данных в Microsoft Excel

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

Комьюнити теперь в Телеграм

Подпишитесь и будьте в курсе последних IT-новостей

Подписаться

Вариант 2: Настраиваемая сортировка

Более продвинутый вариант, позволяющий задать сразу несколько условий упорядочения, – это настраиваемая сортировка, выполняющаяся через соответствующее окно. Давайте разберем сортировку по двум разным параметрам:

  1. Вы можете не выделять заранее столбец, если для него задано название. Вызовите то же меню редактирования, но на этот раз нажмите по «Настраиваемая сортировка».Вызов меню настроек для сортировки данных в Microsoft Excel

  2. Выберите вариант с расширением или сохранением диапазона, если предварительно выделили столбец.Переход в меню настроек для сортировки данных в Microsoft Excel

  3. Вы увидите первый уровень сортировки, который и стоит настроить с самого начала.Автоматическое добавление первого уровня для сортировки данных в Microsoft Excel

  4. Выберите столбец для сортировки из первого выпадающего списка.Выбор столбца для сортировки данных в Microsoft Excel

  5. Далее укажите вариант сортировки. Это может быть значение, цвет шрифта или ячейки, знаки условного форматирования.Выбор типа значений для сортировки данных в Microsoft Excel

  6. В завершение укажите, в каком порядке необходимо отсортировать данные.Выбор последовательности для сортировки данных в Microsoft Excel

  7. Если затем нужно применить еще один вариант сортировки, добавьте уровень и настройте его должным образом.Добавление второго уровня для сортировки данных в Microsoft Excel

  8. После применения вернитесь к таблице и убедитесь в том, что действия произведены верно. Учитывайте, что в этом случае сортировка тоже собьется, если вы внесете изменения в любой ячейке.Результат после настройки для сортировки данных в Microsoft Excel

Вариант 3: Функция НАИБОЛЬШИЙ или НАИМЕНЬШИЙ

Последний вариант – единственный динамический, то есть после внесения изменений в клетках сортировка автоматически перестроится и ее последовательность будет правильной. Как вы уже поняли, для этого понадобится использовать функцию НАИБОЛЬШИЙ или НАИМЕНЬШИЙ.

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

  2. Далее в скобках укажите (C:C;СТРОКА(C1)), поменяв буквы на номер столбца сортировки.Настройка функции для сортировки данных в Microsoft Excel

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

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

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

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

Если вам нужно отсортировать список, то к вашим услугам куча способов, самый простой из которых — кнопки сортировки на вкладке или в меню Данные (Data — Sort). Бывают, однако, ситуации, когда сортировку списка нужно делать автоматически, т.е. формулами. Такое может потребоваться, например, при формировании данных для выпадающего списка, при вычислении данных для диаграмм и т.д. Как же «на лету» сортировать список формулой?

Способ 1. Числовые данные

Если список содержит только числовую информацию, то его сортировку можно легко сделать с помощью функций НАИМЕНЬШИЙ (SMALL) и СТРОКА (ROW):

sort_by_formulas1.gif

Функция НАИМЕНЬШИЙ (SMALL) выдергивает из массива (столбец А) n-й по счету наименьший элемент. Т.е. НАИМЕНЬШИЙ(A:A;1) — это самое маленькое число из столбца, НАИМЕНЬШИЙ(А:А;2) — второе по счету наименьшее и т.д.

Функция СТРОКА (ROW) выдает порядковый номер строки для указанной ячейки, т.е. СТРОКА(А1)=1, СТРОКА(A2)=2  и т.д. В данном случае она используется просто как генератор последовательности чисел n=1,2,3… для нашего отсортированного списка. С тем же успехом можно было сделать дополнительный столбец, заполнить его вручную числовой последовательностью 1,2,3… и ссылаться на него вместо функции СТРОКА.

Способ 2. Текстовый список и обычные формулы

Если в списке не числа, а текст, то функция НАИМЕНЬШИЙ (SMALL) уже не сработает, поэтому придется пойти другим, чуть более длинным, путем.

Сначала добавим служебный столбец с формулой, где будет вычисляться порядковый номер каждого имени в будущем отсортированном списке с помощью функции СЧЁТЕСЛИ (COUNTIF):

sort_by_formulas2.gif

В английской версии это будет:

=COUNTIF(A:A,»<«&A1)+COUNTIF($A$1:A1,»=»&A1)

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

Теперь полученные номера надо расставить последовательно по возрастанию. Для этого можно использовать функцию НАИМЕНЬШИЙ (SMALL) из первого способа:

sort_by_formulas3.gif

Ну, и наконец, осталось просто вытащить из списка имена по их номерам.  Для этого можно использовать такую формулу:

sort_by_formulas4.gif

Функция ПОИСКПОЗ (MATCH) ищет в столбце В нужный порядковый номер (1, 2, 3 и т.д.) и выдает, по сути, номер строки, где находится это число. Функция ИНДЕКС (INDEX) вытаскивает из столбца А имя по этому номеру строки.

Способ 3. Формула массива

Этот способ представляет собой, по сути, тот же алгоритм расстановки, что и в Cпособе-2, но реализованный формулой массива. Для упрощения формулы диапазону ячеек С1:С10 было дано имя List (выделить ячейки, нажать Ctrl+F3 и кнопку Создать):

sort_by_formulas5.gif

В ячейку Е1 копируем нашу формулу:

=ИНДЕКС(List; ПОИСКПОЗ(НАИМЕНЬШИЙ(СЧЁТЕСЛИ(List; «<«&List); СТРОКА(1:1)); СЧЁТЕСЛИ(List; «<«&List); 0))

Или в англоязычной версии:

=INDEX(List, MATCH(SMALL(COUNTIF(List, «<«&List), ROW(1:1)), COUNTIF(List, «<«&List), 0))

и нажимаем Ctrl+Shift+Enter, чтобы ввести ее как формулу массива. Потом полученную формулу можно скопировать вниз на всю длину списка.

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

Во-первых, диапазон List нужно будет задать динамически. Для этого при создании нужно указать не фиксированный диапазон C3:C10, а специальную формулу, которая будет ссылаться на все имеющиеся значения независимо от их количества. Нажмите Alt+F3 или откройте вкладку Формулы — Диспетчер имен (Formulas — Name Manager), создайте новое имя и в поле Ссылка (Reference) впишите вот такую формулу (я предполагаю, что диапазон сортируемых данных начинается с ячейки C1):

=СМЕЩ(C1;0;0;СЧЁТЗ(C1:C1000);1)

=OFFSET(C1,0,0,СЧЁТЗ(C1:C1000),1)

Во-вторых, вышеописанную формулу массива нужно будет протянуть вниз с запасом — с расчетом на вводимые в будущем дополнительные данные. При этом формула массива начнет выдавать ошибку #ЧИСЛО на незаполненных пока ячейках. Чтобы ее перехватить, можно использовать функцию ЕСЛИОШИБКА, которую нужно дописать «вокруг» нашей формулы массива:

=ЕСЛИОШИБКА(ИНДЕКС(List; ПОИСКПОЗ(НАИМЕНЬШИЙ(СЧЁТЕСЛИ(List; «<«&List); СТРОКА(1:1)); СЧЁТЕСЛИ(List; «<«&List); 0));»»)

=IFERROR(NDEX(List, MATCH(SMALL(COUNTIF(List, «<«&List), ROW(1:1)), COUNTIF(List, «<«&List), 0));»»)

Она перехватывает ошибку #ЧИСЛО и выводит вместо нее пустоту (пустые кавычки).

Ссылки по теме:

  • Сортировка диапазона по цвету
  • Что такое формулы массива и зачем они нужны
  • Сортировка функцией СОРТ и динамические массивы в новом Office 365

18K

24 мая 2007 года

pavel55

79 / / 14.05.2007

хм, если нужно сортировать данные в ячейках, то лучше воспользоваться встроенной Сортировкой. Если вы хотите сортировать массивы данных (не на листе), то вот пару примеров

Сортировка массивов (не помню на каком форуме взял)

Код:

Sub MyBubbleSort(arr, Optional k As Byte = 0) ‘ Сортировка простым обменом ‘ ort by [E]lementary [E]xchange
 Dim i As Long, j As Long, t As Variant
    On Error Resume Next
    For i = UBound(arr) To LBound(arr) + 1 Step -1
        For j = LBound(arr) To i — 1
            If CSng(Left(arr(j), Len(arr(j)) — k)) > CSng(Left(arr(j + 1), Len(arr(j + 1)) — k)) Then
                    t = arr(j)
                    arr(j) = arr(j + 1)
                    arr(j + 1) = t
            End If
        Next
    Next
End Sub

Код:

Sub MyQuickSort(arr, Optional First As Long = -1, Optional Last As Long = -1) ‘ Быстрая сортировка, [Q]uick ort
 Dim i As Long, j As Long, MidEl As Variant, t As Variant
    On Error Resume Next
    First = IIf(First = -1, LBound(arr), First)
    Last = IIf(Last = -1, UBound(arr), Last)
    i = First
    j = Last
    MidEl = arr((First + Last) 2)
    Do While i <= j
        If arr(i) < MidEl Then
            i = i + 1
        Else
            If arr(j) > MidEl Then
                j = j — 1
            Else
                t = arr(i)
                arr(i) = arr(j)
                arr(j) = t
                i = i + 1
                j = j — 1
            End If
        End If
    Loop
    If First < j Then Call MyQuickSort(arr, First, j)
    If i < Last Then Call MyQuickSort(arr, i, Last)
End Sub

Понравилась статья? Поделить с друзьями:
  • Массив по нескольким условиям в excel
  • Массив если в excel примеры
  • Массив для функции если в excel
  • Массив данных для работы в excel
  • Масло гидравлическое mobil dte 10 excel 32 20л