Macro VBA para classificar e aplicar formatação condicional a um intervalo de células com número dinâmico de linhas

Macro VBA para classificar e aplicar formatação condicional a um intervalo de células com número dinâmico de linhas

Eu tenho um intervalo (a imagem abaixo).

captura de tela do Excel

Observe que:

  • O intervalo é gerado por outro aplicativo, portanto, o número de linhas está sempre mudando e não é formatado como uma 'tabela' do Excel
  • O número de colunas, entretanto, é fixo.
  • Sempre há uma Totalslinha, que é sempre a última linha (no entanto, as células além desta contêm fórmulas avaliadas como '')

Quero ajuda com uma macro VBA que irá classificar o intervalo usando o cabeçalho Dcomo chave (crescente):

[Veja o link para a tabela classificada abaixo]

Observe que:

  • A Totalslinha (que é sempre a última linha) deve ser ignorada e não classificada.

Após essa classificação, quero que a mesma macro VBA aplique a formatação condicional ao intervalo usando o mesmo cabeçalho Dda chave - a formatação aplica uma borda ao redor do intervalo onde Dé o mesmo:

A tabela final está aqui:http://goo.gl/H118Lx

Observe que:

  • Não quero bordas em torno de valores únicos no cabeçalho, Dou seja, linhas onde a contagem de valores de células não é maior que 1.

Responder1

Você não precisa de VBA. Você só precisa entender melhor a flexibilidade por trás dos formatos condicionais. Por isso, vou responder à pergunta mesmo que seja ruim.

Você pode classificar por coluna Dcomo está e a linha de totais estará na parte inferior se for a única com um espaço em branco. Aplique seus formatos condicionais a toda a coluna conforme mostrado abaixo.

Formato: Bordas à esquerda
Faixa: A:A
Fórmula:=AND($D1<>"",OR($D1=OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0)))

Formato: Bordas à direita
Faixa: E:E
Fórmula:=AND($D1<>"",OR($D1=OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0)))

Formato: Bordas na parte superior
Faixa: A:E
Fórmula:=AND($D1<>"",$D1<>OFFSET($D1,-1,0),$D1=OFFSET($D1,1,0))

Formato: Bordas na parte inferior
Faixa: A:E
Fórmula:=AND($D1<>"",$D1=OFFSET($D1,-1,0),$D1<>OFFSET($D1,1,0))


Este método irá virar esta folha:

Antes

... nesta planilha:

Depois

informação relacionada