Сортировка таблиц с учётом данных в соседнем столбце - VBA
Формулировка задачи:
Здравствуйте, я начинаю осваивать VBA и столкнулась со следующей задачей
допустим, есть таблица
Необходимо отсортировать таблицу последующему алгоритму:
1) сортируем по стоблцу "результат 1" от максимального к минимального
2) сморим в какой строке последняя ячейка либо 0 либо 1.
3) выделяем таблицу от этой строки до последней и сортируем столбец "результат 2" от максимального к минимальному
4) также смотрим в какой строке последняя ячейка 0 либо 1 и сортируем следующий столбец начиная с этой строки.
В итоге получим
Данную сортировку не трудно осуществить вручную, но лишь при малом объеме данных, а для таблиц с количеством строк и столбцов более 100 это весьма неудобно, поэтому необходима автоматизация данной операции.
Очень буду рада помощи)
клиент |
результат 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 | результат 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 |
Решение задачи: «Сортировка таблиц с учётом данных в соседнем столбце»
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
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д