Сортировка таблиц с учётом данных в соседнем столбце - VBA

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, я начинаю осваивать VBA и столкнулась со следующей задачей допустим, есть таблица

клиент

результат 1 результат 2 результат 3 результат 4
Борисов 0 4566 2345 4677
Иванов 1 0 0 1
Лебедев 555 0 0 56
Петров 0 34322 0 0
Сидоров 12342 0 0 1
Смирнов 456 1 1 234322
Сорокин 0 456444444 1 3555
Фролов 1 0 45 0
Необходимо отсортировать таблицу последующему алгоритму: 1) сортируем по стоблцу "результат 1" от максимального к минимального 2) сморим в какой строке последняя ячейка либо 0 либо 1. 3) выделяем таблицу от этой строки до последней и сортируем столбец "результат 2" от максимального к минимальному 4) также смотрим в какой строке последняя ячейка 0 либо 1 и сортируем следующий столбец начиная с этой строки.
клиент результат 1 результат 2 результат 3 результат 4
Сидоров 12342 0 0 1
Лебедев 555 0 0 56
Смирнов 456 1 1 234322
Иванов 1 0 0 1
Фролов 1 0 45 0
Борисов 0 4566 2345 4677
Петров 0 34322 0 0
Сорокин 0 456444444 1 3555
клиент результат 1 результат 2 результат 3 результат 4
Сидоров 12342 0 0 1
Лебедев 555 0 0 56
Смирнов 456 1 1 234322
Сорокин 0 456444444 1 3555
Петров 0 34322 0 0
Борисов 0 4566 2345 4677
Иванов 1 0 0 1
Фролов 1 0 45 0
клиент результат 1 результат 2 результат 3 результат 4
Сидоров 12342 0 0 1
Лебедев 555 0 0 56
Смирнов 456 1 1 234322
Сорокин 0 456444444 1 3555
Петров 0 34322 0 0
Борисов 0 4566 2345 4677
Фролов 1 0 45 0
Иванов 1 0 0 1
В итоге получим

клиент

результат 1 результат 2 результат 3 результат 4
Сидоров 12342 0 0 1
Лебедев 555 0 0 56
Смирнов 456 1 1 234322
Сорокин 0 456444444 1 3555
Петров 0 34322 0 0
Борисов 0 4566 2345 4677
Фролов 1 0 45 0
Иванов 1 0 0 1
Данную сортировку не трудно осуществить вручную, но лишь при малом объеме данных, а для таблиц с количеством строк и столбцов более 100 это весьма неудобно, поэтому необходима автоматизация данной операции. Очень буду рада помощи)

Решение задачи: «Сортировка таблиц с учётом данных в соседнем столбце»

textual
Листинг программы
Sub SortTable()
  Dim R As Range, Row&, Col%, cRow&, cCol%
    Set R = [a1].CurrentRegion  ' диапазон таблицы
    cCol = R.Columns.Count  ' количество столбцов
    cRow = R.Rows.Count     ' количество строк в диапазоне
    Row = 1     ' сколько строк пропускаем от начала диапазона (изначально пропускаем шапку)
    Col = 2     ' столбец для сортировки
    Do
        cRow = cRow - Row   ' количество строк в диапазоне для сортировки
        Set R = R.Offset(Row).Resize(cRow)  ' диапазон для сортировки
        R.Sort R.Columns(Col), xlDescending ' сортировка диапазона по столбцу Col
        If Col = cCol Then Exit Do  ' выход, если отсортировали последний столбец
        For Row = cRow To 1 Step -1 ' поиск строки отличной от 0 и 1 с конца в столбце Col
            If R.Cells(Row, Col).Value <> 0 And R.Cells(Row, Col).Value <> 1 Then Exit For
        Next
        Col = Col + 1   ' следующий столбец
    Loop Until Row = cRow   ' выход из цикла, если значений равных 0 или 1 в отсортированом столбце в конце нет
End Sub

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.769 из 5
Похожие ответы