Сортировка таблиц с учётом данных в соседнем столбце - 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
Листинг программы
  1. Sub SortTable()
  2.   Dim R As Range, Row&, Col%, cRow&, cCol%
  3.     Set R = [a1].CurrentRegion  ' диапазон таблицы
  4.    cCol = R.Columns.Count  ' количество столбцов
  5.    cRow = R.Rows.Count     ' количество строк в диапазоне
  6.    Row = 1     ' сколько строк пропускаем от начала диапазона (изначально пропускаем шапку)
  7.    Col = 2     ' столбец для сортировки
  8.    Do
  9.         cRow = cRow - Row   ' количество строк в диапазоне для сортировки
  10.        Set R = R.Offset(Row).Resize(cRow)  ' диапазон для сортировки
  11.        R.Sort R.Columns(Col), xlDescending ' сортировка диапазона по столбцу Col
  12.        If Col = cCol Then Exit Do  ' выход, если отсортировали последний столбец
  13.        For Row = cRow To 1 Step -1 ' поиск строки отличной от 0 и 1 с конца в столбце Col
  14.            If R.Cells(Row, Col).Value <> 0 And R.Cells(Row, Col).Value <> 1 Then Exit For
  15.         Next
  16.         Col = Col + 1   ' следующий столбец
  17.    Loop Until Row = cRow   ' выход из цикла, если значений равных 0 или 1 в отсортированом столбце в конце нет
  18. End Sub

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


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

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

13   голосов , оценка 3.769 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы