IP

sábado, 11 de maio de 2013

Ordenar automaticamente, no excel, os valores de uma tabela!

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
---------------------------------------------
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
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: