Notifications
Clear all

Ranking

9 Posts
3 Usuários
0 Reactions
1,910 Visualizações
(@leandropr)
Posts: 9
Active Member
Topic starter
 

boa noite.

eu tenho uma planilha com nomes , cursos, modalidade, período a nota

eu criei um filtro, seja por curso, modalidade ou período

tem na coluna E a nota e já esta classificado do maior pro menor

eu gostaria que a medida que fosse utilizado a macro Pesquisa que o Ranking fosse atualizado utilizando apenas os dados filtrados.
neste caso o aluno pode ser o décimo no geral ou seja sem filtro algum
quando eu filtro por curso o mesmo aluno se torna o quinto
se eu filtrar curso mais modalidade o mesmo aluno se torna terceiro
e se eu filtrar por curso , modalidade e período o mesmo aluno se torna o primeiro.

desde já agradeço

 
Postado : 21/02/2014 4:14 pm
(@weslley)
Posts: 90
Trusted Member
 

Meu caro,
verifica se este exemplo atende sua expectativa.

* Qualquer dúvida ou modificação, inspecione o código fonte, está bem explicado.

 
Postado : 21/02/2014 5:11 pm
(@leandropr)
Posts: 9
Active Member
Topic starter
 

obrigado pela atenção
mas na coluna Ranking gostaria que aparecesse a classificação se 1º 4º ou 17º
e que a medida que fosse filtrando isso fosse alterando

 
Postado : 21/02/2014 5:53 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Limpe os filtros e em F8 faça:

=SE(SUBTOTAL(3;$E$7:E8)=SUBTOTAL(3;$E$7:E7)+1;MÁXIMO($F$7:F7)+1;0)

Arraste para baixo.

Abs,

 
Postado : 21/02/2014 6:21 pm
(@leandropr)
Posts: 9
Active Member
Topic starter
 

Perfeito Mandrix.

Muito obrigado pela ajuda

abraços a todos

 
Postado : 21/02/2014 6:33 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Boa noite Leandro

Só faltou vc clicar na mãozinha para agradecer ao Mandrix e ao Weslley que te ajudaram.

At.te

 
Postado : 21/02/2014 6:46 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

LeandroPr e Mandrix,
não sei se eu é que não entendi corretamente, pegando sómente uma amostra dos primeiros resultados no exemplo postado sem filtrarmos temos:

Desconsiderando as demais colunas:....................Ranking
NOME..........................................NOTA...Formula Mandrix
LUCIANA ROCHA NOGUEIRA.....................99........1
CAIO AUGUSTO RIOS FEOLA.....................99........2
EVELYN NATHALIA DA SILVA CRUZ ............98.........3
ANA VIEIRA DE ARAUJO .........................98........4
LAIS MAYUMI HARA ..............................98 .......5
MARIA CLARA MOREIRA MATIAS ...............98 ........6
LEYNA MISACHI SUZUKI .........................98.......7
MARIA CAROLINA SARTORIO ....................98.......8
MARIANA DRUMMOND MARTINS LIMA .........98........9

Como temos Notas Repetidas, o correto não seria :
As duas notas 99 o Ranking ser 1
E todas as Notas 98 o Ranking ser 3

Como não estou acostumado com esta função mas vendo classificações de eventos na TV, e não tendo nenhum outro criterio para desempate, acredito que estou pensando da forma correta, me corrijam por favor se estiver errado.
Mas se eu estiver correto, utilizando a função em VBA (WorksheetFunction.Método Ordem) ou ORDEM função nativa, troque a rotina pela abaixo, façam os testes e veja se é isto.

Private Sub Worksheet_Change(ByVal Target As Range)

    If Not Intersect(Target, [c_curso]) Is Nothing Then 'Verifica se o curso foi selecionado
        Call filtrar 'Invoca o metodo filtrar
        Call MontaRanking
    
    ElseIf Not Intersect(Target, [c_modalidade]) Is Nothing Then 'Verifica se a modalidade foi selecionada
        Call filtrar 'Invoca o metodo filtrar
        Call MontaRanking
    
    ElseIf Not Intersect(Target, [c_periodo]) Is Nothing Then 'Verifica se o periodo foi selecionado
        Call filtrar 'Invoca o metodo filtrar
        Call MontaRanking
    
    End If

End Sub

Sub MontaRanking() 'Função ORDEM
    
    Dim a As Long
    Dim sUltimaLinha As Long
    
    sUltimaLinha = ActiveSheet.Cells(Cells.Rows.Count, 5).End(xlUp).Row
    
    'Atualiza o Ranking
    For a = 8 To sUltimaLinha
        
        Cells(a, 6) = Application.WorksheetFunction.Rank(Cells(a, 5), Range("E8:E" & Range("E65536").End(xlUp).Row), 0)
    
    Next a

End Sub

[]s

 
Postado : 21/02/2014 7:05 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Mauro,

Vc tem toda razão. Para que os empates tenham o mesmo ranking, é necessário mudar a fórmula em F8 (depois de limpar os filtros) para:

=SE(E(SUBTOTAL(3;$E$7:E8)=SUBTOTAL(3;$E$7:E7)+1;PROCV(MÁXIMO($F$7:F7);ESCOLHER({21};$E$6:E7;$F$6:F7);2;0)<>E8);SUBTOTAL(3;$E$7:E7);F7)

Bem lembrado.

Abraço a todos.

 
Postado : 23/02/2014 7:37 pm
(@leandropr)
Posts: 9
Active Member
Topic starter
 

meus amigos, me desculpem por nao ter respondido antes,
estava resolvendo uns problemas o que mudou o meu foco no trabalho,
quero agradecer a todos mesmo depois de resolvido , postaram melhorias os quais vou usar com certeza.

abraços

 
Postado : 31/03/2014 9:00 pm