Макрос VBA для сортировки и применения условного форматирования к диапазону ячеек с динамическим числом строк

Макрос VBA для сортировки и применения условного форматирования к диапазону ячеек с динамическим числом строк

У меня есть диапазон (изображение ниже).

снимок экрана Excel

Обратите внимание, что:

  • Диапазон генерируется другим приложением, поэтому количество строк постоянно меняется и не форматируется как «таблица» Excel.
  • Однако количество столбцов фиксировано.
  • Всегда есть Totalsстрока, которая всегда является последней (ячейки за ней, однако, содержат формулу, вычисляющую значение '')

Мне нужна помощь с макросом VBA, который будет сортировать диапазон, используя заголовок Dв качестве ключа (по возрастанию):

[См. ссылку на отсортированную таблицу ниже]

Обратите внимание, что:

  • Строку Totals(которая всегда является последней) следует игнорировать и не сортировать.

После этой сортировки я хочу, чтобы тот же макрос VBA применил условное форматирование к диапазону, используя тот же заголовок Dв качестве ключа — форматирование применяет границу вокруг диапазона, где Dто же самое:

Финальная таблица здесь:http://goo.gl/H118Lx

Обратите внимание, что:

  • Мне не нужны границы вокруг уникальных значений в заголовке, Dт.е. строк, где количество значений ячеек не больше 1.

решение1

Вам вообще не нужен VBA. Вам просто нужно лучше понимать гибкость условных форматов. Поэтому я отвечу на вопрос, хотя он и плохой.

Вы можете сортировать по столбцу Dкак есть, и строка итогов будет внизу, если она единственная с пробелом. Примените ваши условные форматы ко всему столбцу, как показано ниже.

Формат: Границы слева
Диапазон: A:A
Формула:=AND($D1<>"",OR($D1=OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0)))

Формат: Границы справа
Диапазон: E:E
Формула:=AND($D1<>"",OR($D1=OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0)))

Формат: Границы сверху
Диапазон: A:E
Формула:=AND($D1<>"",$D1<>OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0))

Формат: Границы снизу
Диапазон: A:E
Формула:=AND($D1<>"",$D1=OFFSET($D1,-1,0),$D1<>OFFSET($D1,1,0))


Этот метод перевернет этот лист:

До

... в этот лист:

После

Связанный контент