locked
Macro classificar ordem crescente ( Atualizar?) RRS feed

  • Pergunta

  • Pessoal, tenho diversas planilhas, que variam de 1000 linhas
       e 6 colunas até 800 linhas e 15 colunas.
    Os valores das linhas são colocados de forma aleatoria, mas 
      devem ser apresentados na ordem crescente, pois indicam
      leituras de um aparelho que possuo que mede picos de utilização
      de "quarto de força".
    Por exemplo:
    Planilha

    18 20 25 23 10 11 24 14 6 2 13 9 5 16 3
    23 15 5 4 12 16 20 6 11 19 24 1 9 13 7

    Gostaria de ter o resultado da seguinte forma:
    2 3 5 6 9 10 11 13 14 16 18 20 23 24 25
    1 4 5 6 7 9 11 12 13 15 16 19 20 23 24


    Sei que o Excel classificar linhas, mas como mencionei,
      são várias tabelas onde a maior tem 1000 linhas e 6 colunas,
      enquanto que a menor tem 600 linhas por 25 colunas.

    Alguem teria uma macro que seja capaz de diferenciar o número de
      linhas e colunas e fizesse essa tarefa de uma vez ?

    Me ajudaria muito mesmo se alguma alma caridosa pudesse criar ou
       fornecer a macro demais, pois são 6 tabelas......
    Agradeço antecipadamente a leitura do problema aguardo alguma solução.....

    terça-feira, 28 de abril de 2009 01:22

Respostas

  • Acabei de fazer o teste e o resultado foi este.
    2 3 5 6 9 10 11 13 14 16 18 20 23 24 25
    1 4 5 6 7 9 11 12 13 15 16 19 20 23 24
    1 4 6 7 8 9 10 11 12 14 16 17 20 23 24

    É porque fiz o código supondo que seus dados começem da célula A1...Coloque essa tabela na célula a1...vai dar certo....
    Onde está a 1º célula da sua tabela tirando o nome da coluna, temos que adaptar o código..
    • Marcado como Resposta Gmamorim terça-feira, 28 de abril de 2009 14:59
    terça-feira, 28 de abril de 2009 14:48

Todas as Respostas

  • Olá..
    Criei essa rotina que ordena linha a linha supondo que seus dados estejam a partir da célula A1.

    Sub OrdenaLinha() Dim L#, ColF# ColF = Range("A1").End(xlToRight).Columns.Column For L = 1 To Rows.Count If Range("A" & L) = "" Then Exit For Range(Cells(L, 1), Cells(L, ColF)).Sort Key1:=Cells(L, 1), Order1:=xlAscending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, DataOption1:=xlSortNormal Next End Sub



    Não se esqueça de marcar a resposta como respondida...
    Qualquer dúvida post denovo..até..
    terça-feira, 28 de abril de 2009 03:03
  • Eva!

    Quase deu certo, mas veja o que acontece:

    Trecho da Planilha antes de rodar a macro:

    Mesmo trecho da Planilha DEPOIS de rodar a macro:

    18

    20

    25

    23

    10

    11

    24

    14

    6

    2

    13

    9

    5

    16

    3

    18

    20

    25

    23

    10

    11

    24

    14

    6

    2

    13

    9

    5

    16

    3

    23

    15

    5

    4

    12

    16

    20

    6

    11

    19

    24

    1

    9

    13

    7

    5

    15

    23

    4

    12

    16

    20

    6

    11

    19

    24

    1

    9

    13

    7

    20

    23

    12

    8

    6

    1

    7

    11

    14

    4

    16

    10

    9

    17

    24

    12

    20

    23

    8

    6

    1

    7

    11

    14

    4

    16

    10

    9

    17

    24

     A macro colocou alguns valores das linhas em ordem, mas  “esqueceu” de alguns dados.

    Alguma sugestão? Pesquisando no fórum achei um tópico bem parecido, mas que não abrange todos os meus valores:

     http://social.msdn.microsoft.com/Forums/pt-BR/excelpt/thread/d4eb0b1b-b140-4fe4-947c-40cdd3c6aca9/

    O ideal seria ter uma macro parecida com esta que englobasse todos meus dados, pois a macro explicada pelo tuta, abarca parte dos dados.

    Aguardo novamente o apoio do pessoal.

    GRATO!

    terça-feira, 28 de abril de 2009 13:44
  • Acabei de fazer o teste e o resultado foi este.
    2 3 5 6 9 10 11 13 14 16 18 20 23 24 25
    1 4 5 6 7 9 11 12 13 15 16 19 20 23 24
    1 4 6 7 8 9 10 11 12 14 16 17 20 23 24

    É porque fiz o código supondo que seus dados começem da célula A1...Coloque essa tabela na célula a1...vai dar certo....
    Onde está a 1º célula da sua tabela tirando o nome da coluna, temos que adaptar o código..
    • Marcado como Resposta Gmamorim terça-feira, 28 de abril de 2009 14:59
    terça-feira, 28 de abril de 2009 14:48
  • PERFEITO!
    Funciona que é uma beleza!
    Agora posso fazer o que preciso!
    Muito Obrigado EvangelistaLionMedalhas de usuárioMedalhas de usuário!!!!
    terça-feira, 28 de abril de 2009 15:01
  • Eva!

    Quase deu certo, mas veja o que acontece:

    Trecho da Planilha antes de rodar a macro:

    Mesmo trecho da Planilha DEPOIS de rodar a macro:

    18

    20

    25

    23

    10

    11

    24

    14

    6

    2

    13

    9

    5

    16

    3

    18

    20

    25

    23

    10

    11

    24

    14

    6

    2

    13

    9

    5

    16

    3

    23

    15

    5

    4

    12

    16

    20

    6

    11

    19

    24

    1

    9

    13

    7

    5

    15

    23

    4

    12

    16

    20

    6

    11

    19

    24

    1

    9

    13

    7

    20

    23

    12

    8

    6

    1

    7

    11

    14

    4

    16

    10

    9

    17

    24

    12

    20

    23

    8

    6

    1

    7

    11

    14

    4

    16

    10

    9

    17

    24

      A macro colocou alguns valores das linhas em ordem, mas   “esqueceu” de alguns dados.

    Alguma sugestão? Pesquisando no fórum achei um tópico bem parecido, mas que não abrange todos os meus valores:

      http://social.msdn.microsoft.com/Forums/pt-BR/excelpt/thread/d4eb0b1b-b140-4fe4-947c-40cdd3c6aca9/

    O ideal seria ter uma macro parecida com esta que englobasse todos meus dados, pois a macro explicada pelo tuta, abarca parte dos dados.

    Aguardo novamente o apoio do pessoal.

    GRATO!

    Bom dia Senhores. Venho desde ontem pesquisando para conseguir uma classificação idêntica  a esta solicitada pelo amigo GAMORIM e tão bem ralizada pelo amigo EvangelistaLion. É exatamente o que eu preciso, mas como não consegui ainda entender a linguagem de programação do VBA, não consigo adaptar o código ao formato da minha planilha. Estou colocando a planilha neste link [URL=http://www.4shared.com/file/199369531/67748391/conferencia_vba.html]conferencia_vba.xls[/URL]
    , para que SE POSSÍVEL vocês adaptassem esse VBA à minha necessidade. Aproveito ainda, para solicitar alguma literatura, onde se explique a estrutura da linguagem do VBA, porque tenho absoluta certeza de que não é difícil. Consigo fazer html em um txt, bbbcode, fórmulas do próprio excel, e outras linguagens. Mas o VBA não entra na caxola. Talvez por falta de uma leitura da qual por mais que eu busque, não a encontro. Ah, só pra confirmar, a primeira célula que dever ser classificada é "B3", e a última é "K101". Tenho mais duas dúvidas, uma na formatação condicional e uma na fórmula, mas isto é pra outro post. Obrigado a todos, bom Domingo e feliz 2010.

     
    domingo, 17 de janeiro de 2010 13:33
  • OLÁ....

    AQUI O CÓDIGO ADAPTADO...

    Sub OrdenaLinha()
        Dim L#, ColF#
        ColF = 11 ' NÚMERO DA COLUNA FINAL
        For L = 3 To Rows.Count ' INICIA O FOR NA LINHA 3 ATÉ A ULTIMA LINHA DA PLANILHA
            If Range("B" & L) = "" Then Exit For ' SE ENCOMTRAR UMA LINHA EM BRANCO TERMINA O CÓDIGO
            Range(Cells(L, 2), Cells(L, ColF)).Sort Key1:=Cells(L, 2), Order1:=xlAscending, Header:=xlGuess, _
                OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, DataOption1:=xlSortNormal
            'ORDENA A LINHA INTERIRA DE ORDEM ASCENDENTE
        Next ' PRÓXIMA LINHA
    End Sub

    Éste livro eu já li e é muito bom...
    http://www.submarino.com.br/produto/1/1808066/treinamento+avancado+em+vba
    Este não li, mas parece ser bom também..
    http://www.submarino.com.br/produto/1/21262941/curso+essencial+de+vba

    Site sobre excel...
    http://www.tudosobrexcel.com/

    Se solucionar marque como resposta..
    Até..

    • Sugerido como Resposta cmtealmeida quarta-feira, 20 de janeiro de 2010 13:17
    quarta-feira, 20 de janeiro de 2010 12:01
  • OLÁ....

    AQUI O CÓDIGO ADAPTADO...

    Sub OrdenaLinha()
        Dim L#, ColF#
        ColF = 11 ' NÚMERO DA COLUNA FINAL
        For L = 3 To Rows.Count ' INICIA O FOR NA LINHA 3 ATÉ A ULTIMA LINHA DA PLANILHA
            If Range("B" & L) = "" Then Exit For ' SE ENCOMTRAR UMA LINHA EM BRANCO TERMINA O CÓDIGO
            Range(Cells(L, 2), Cells(L, ColF)).Sort Key1:=Cells(L, 2), Order1:=xlAscending, Header:=xlGuess, _
                OrderCustom:=1, MatchCase:=False, Orientation:=xlLeftToRight, DataOption1:=xlSortNormal
            'ORDENA A LINHA INTERIRA DE ORDEM ASCENDENTE
        Next ' PRÓXIMA LINHA
    End Sub

    Éste livro eu já li e é muito bom...
    http://www.submarino.com.br/produto/1/1808066/treinamento+avancado+em+vba
    Este não li, mas parece ser bom também..
    http://www.submarino.com.br/produto/1/21262941/curso+essencial+de+vba

    Site sobre excel...
    http://www.tudosobrexcel.com/

    Se solucionar marque como resposta..
    Até..


    Sensacioal. Perfeito. E o livro já foi comprado.

    MUITO OBRIGADO.


    8O)
    quarta-feira, 20 de janeiro de 2010 13:19
  • Olá....Que bom que deu certo....Boa leitura...
    Você marcou a opção errada....Você clicou em propor como resposta....Você tem que clicar em marcar como resposta..
    Abraço..
    quarta-feira, 20 de janeiro de 2010 13:30