Notifications
Clear all

Gerar uma tabela invertida espelhada de uma outra

20 Posts
3 Usuários
0 Reactions
2,541 Visualizações
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Tudo bem pessoal?

A partir de uns dados que vou recebendo no decorrer do dia, preciso gerar uma outra tabela onde as mesmas informações são exibidas, porém ao contrário (de ponta cabeça), sempre com a última linha aparecendo no topo, e os dados antigos não fossem deletados, mas sim fossem sendo movidos (empurrados) para baixo

Exemplo em anexo

Detalhe: No exemplo, a tabela original (a da esquerda), já está pronta, mas os dados vão sendo recebidos, linha a linha esporadicamente

Poderiam me ajudar?

Obrigado

 
Postado : 07/02/2018 10:40 am
(@klarc28)
Posts: 971
Prominent Member
 
Option Explicit

Sub TESTE()

Dim I, J As Integer
Dim MAIOR, MENOR As Double
For I = 5 To 13
For J = I + 1 To 14
If Plan1.Range("O" & J).Value <> "" Then
If Plan1.Range("O" & J).Value < Plan1.Range("O" & I).Value Then
MENOR = Plan1.Range("O" & J).Value
MAIOR = Plan1.Range("O" & I).Value
Plan1.Range("O" & I).Value = MENOR
Plan1.Range("O" & J).Value = MAIOR
End If
End If
Next J
Next I

End Sub
 
Postado : 14/02/2018 10:55 am
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Fala Klarc28

Parece que funciona um tempo depois bagunça tudo, vou deixar rodando um pouco aqui!

Porém como faço pra inverter? Preciso que o maior valor fique em cima e o menor valor em baixo

Outra coisa, tem como juntar essas duas rotinas abaixo numa só?

Sub filtro()
    
    Dim intervalo As Range
Set intervalo = Plan1.Range("O6:O16")

intervalo.Cells.ClearContents
    Dim I As Integer
    Dim J As Integer
    Dim linha As Integer
    Dim achou As Boolean
    Plan1.Range("O5").Value = Plan1.Range("I1").Value
    For I = 2 To 100
        linha = 5
        achou = False
        While Plan1.Range("O" & linha).Value <> "" And achou = False
            If Plan1.Range("I" & I).Value = Plan1.Range("O" & linha).Value Then
                achou = True
            End If
            linha = linha + 1
        Wend
        
        If achou = False Then
            Plan1.Range("O" & linha).Value = Plan1.Range("I" & I).Value
        End If
    Next I
    
End Sub


Sub maiormenor()

Dim I, J As Integer
Dim MAIOR, MENOR As Double
For I = 5 To 13
For J = I + 1 To 14
If Plan1.Range("O" & J).Value <> "" Then
If Plan1.Range("O" & J).Value < Plan1.Range("O" & I).Value Then
MENOR = Plan1.Range("O" & J).Value
MAIOR = Plan1.Range("O" & I).Value
Plan1.Range("O" & I).Value = MENOR
Plan1.Range("O" & J).Value = MAIOR
End If
End If
Next J
Next I

End Sub

Obrigado

 
Postado : 14/02/2018 11:24 am
(@klarc28)
Posts: 971
Prominent Member
 

Para juntar:

SUB TESTE ( )

CALL FILTRO
CALL MAIORMENOR
END SUB
 
Postado : 14/02/2018 11:31 am
(@klarc28)
Posts: 971
Prominent Member
 

Tem como classificar do maior para o menor de O5 até O14?

Porém como faço pra inverter? Preciso que o maior valor fique em cima e o menor valor em baixo

Cinco dicas que foram muito úteis para mim:

1) Quando não sei fazer algo no VBA, vou ao menu EXIBIÇÃO >> MACROS >> GRAVAR MACRO
Faço o que eu quero aí volto ao menu EXIBIÇÃO >> MACROS >> PARAR GRAVAÇÃO
Aperto Alt + F11 e vejo como a macro fez aqui. Tento entender e tento adaptar.

2) Quando vou criar um código e o resultado não está saindo como o esperado, entro no código e vou apertando F8 para executar passo a passo, aí vou passando o mouse sobre as variáveis para verificar se o valores delas estão corretos, já consertei milhares de códigos dessa forma.

3) Antes de executar o código, vou ao menu Depurar >> Compilar. Isso ajuda corrigir erros mais simples, como o nome de uma variável digitado errado.

4) Declaro todas as variáveis. Isso também evita erros.

5) Sempre uso o Option Explicit lá no início. Ele me obriga a declarar as variáveis.

Como pode ver nos anexos, não há erro.

 
Postado : 14/02/2018 11:33 am
(@ramzero)
Posts: 127
Estimable Member
Topic starter
 

Caraca Klarc28!

Sensacional as dicas, valeu mesmo!

Mais um resolvido para a coleção

Muito obrigado!

 
Postado : 14/02/2018 1:23 pm
Página 2 / 2