Vamos aprender a ordenar automaticamente uma "tabela" no Excel, sem perceber de programação.
Depois de ter testado algumas fórmulas, entre as quais: SE, MAIOR, MENOR... verifiquei que quando temos dois resultados iguais, o Excel apenas se preocupa com o primeiro resultado que encontra...
Para resolver este problema, temos que programar em Visual Basic. Começamos por activar, no Excel, o separador PROGRAMADOR. (Clique nas imagens para fazer zoom!)
1-Ficheiro > Opções
2-Personalizar friso > Programador
3-Depois de fazermos OK aparece, no friso, a opção PROGRAMADOR.
4-Vamos construir uma "tabela" com 20 linhas e 3 colunas Ficando compreendida nas seguintes células: B5:D26. Tenha apenas um livro aberto!
5-Agora vamos programar em Visual Basic. Para isso vamos clicar no separador PROGRAMADOR e depois em VISUAL BASIC.
6-Seguidamente colocamos o seguinte código, que será explicado posteriormente.
Código:
---------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Application.Intersect(Worksheets(1).Range("b5:d26"), Target) Is Nothing) Then
DoSort
End If
End Sub
Private Sub DoSort()
Worksheets(1).Range("b5:d26").Sort Key1:=Worksheets(1).Range("d6"), Order1:=xlDescending, _
Key2:=Worksheets(1).Range("c6"), Order1:=x1Ascending
End Sub
If Not (Application.Intersect(Worksheets(1).Range("b5:d26"), Target) Is Nothing) Then
DoSort
End If
End Sub
Private Sub DoSort()
Worksheets(1).Range("b5:d26").Sort Key1:=Worksheets(1).Range("d6"), Order1:=xlDescending, _
Key2:=Worksheets(1).Range("c6"), Order1:=x1Ascending
End Sub
---------------------------------------------
Nota: O código tem que ficar nas linhas, como é apresentado na imagem.
6-Depois de colocar o código, tem que gravar para o código ficar lá.
7-Para conseguir gravar, tem que escolher o tipo "Livro com permissão para macros de excel".
Vamos agora à explicação do código.
If Not (Application.Intersect(Worksheets(1).Range("b5:d26"), Target) Is Nothing) Then
DoSort
DoSort
Se não acontecer qualquer interacção na folha 1 (worksheets(1)) nas células que estão no intervalo B5:D6 (range ("b5:d6")) acontece nada. Senão (Then), executa sub-rotina DoSort.
Nota: Qualquer que seja o nome da folha 1, usamos sempre a expressão Worksheets(1).
Vamos analisar como é feita a ordenação :
Worksheets(1).Range("b5:d26").Sort Key1:=Worksheets(1).Range("d6"), Order1:=xlDescending, _
Key2:=Worksheets(1).Range("c6"), Order1:=x1Ascending
Só vamos ordenar (Sort) as células da página 1 (Worksheets(1)) que estão no intervalo b5:d26 .Range("b5:d26")
O Primeiro ordenamento (Key1) acontece na folha 1 (Worksheets(1)) na coluna da célula D6 (Range("d6"). O ordenamento é feito de forma descendente, ou seja, do maior para o menor (Order1:=xlDescending,).
A segunda ordenação (Key2) acontece na folha 1 (Worksheets(1)) na coluna da célula C6 (Range("c6"). O ordenamento é feito de forma ascendente, ou seja de A->Z (Order1:=x1Ascending).
Já está! Caso tenha alguma dúvida, deixe nos comentários ou envie uma mensagem através do formulário online.
Sem comentários:
Enviar um comentário