Ir ao conteúdo
  • Cadastre-se

Unir Linhas Repetidas


Rodolfo Castro

Posts recomendados

Bom dia
Tenho uma tabela em excel onde tenho dados de clientes e quais livros eles compraram. Estou precisando unir as informações das linhas, pesquisando por nome e/ou matrícula para saber quais livros ainda faltam ser comprados por cada cliente


Já li diversos posts de como fazer isso por macro ou por formula matricial, mas sou iniciante no excel e não consegui entender nem adaptar a minha realidade nenhuma das formulas que achei.
Tem como alguem dar uma força?

 

 

A Planilha está assim:

data              Matr           aluno    turma                                                       livros

                                                                  maternal     pré I      pré II    1° Ano       2° Ano

                                                                                    P M N    P M N   P M C H I   P M C H I

24/01/2014            1       João       122                         x

24/01/2014            1       João       122                            x

24/01/2014            1       João       122                               x

 

 

Gostaria que ficasse assim:

data              Matr           aluno    turma                                                       livros

                                                                  maternal     pré I      pré II    1° Ano       2° Ano

                                                                                    P M N    P M N   P M C H I   P M C H I

24/01/2014            1       João       122                         x  x  x

(com a data da última compra aparecendo)

 

  

Segue em anexo uma planilha de exemplo com meus dados

Obrigado
Rodolfo

Exemplo.xlsx

Link para o comentário
Compartilhar em outros sites

I) copie o intervalo A1:AJ4 da Plan1 e cole em A1 da Plan2
II) ao rodar o código abaixo o resultado será colocado na Plan2 a partir da linha 5

III) Instale o código abaixo em um módulo comum, assim:
1. copie o código daqui
2. a partir da planilha em que estão os dados tecle 'Alt+F11' para acessar o editor de VBA
3. no menu do editor >> Inserir >> Módulo
4. cole o código na janela em branco que vai se abrir
5. feito! 'Alt+Q' para retornar para a planilha e testar

para rodar o código:
6. tecle 'Alt+F8' >> selecione a macro correspondente >> Executar, ou insira um botão na planilha e vincule-o à macro ou vincule-a a um atalho de teclado (Alt+F8 > Opções).


 

Sub AgrupaCompras()  Dim LR As Long, k As Long, c As Long, x As Long  Dim ws1 As Worksheet, ws2 As Worksheet, rngM As Range    Set ws1 = Sheets("Plan1"): Set ws2 = Sheets("Plan2")    ws2.Range(ws2.Range("A5:AJ5"), ws2.Range("A5:AJ5").End(xlDown)).ClearContents    LR = ws1.Cells(Rows.Count, 1).End(xlUp).Row    x = 5      With ws2        .Cells(5, 1).Resize(, 36).Value = ws1.Cells(5, 1).Resize(, 36).Value          For k = 6 To LR            Set rngM = .[B:B].Find(ws1.Cells(k, 2).Value, lookat:=xlWhole)              If Not rngM Is Nothing Then                c = ws1.Range(ws1.Cells(k, "F"), ws1.Cells(k, "AJ")).Find("x").Column                .Cells(rngM.Row, c) = "x"                  If ws1.Cells(k, 1).Value > .Cells(rngM.Row, 1) Then                    .Cells(rngM.Row, 1) = ws1.Cells(k, 1)                  End If              Else: x = x + 1                .Cells(x, 1).Resize(, 36).Value = ws1.Cells(k, 1).Resize(, 36).Value              End If          Next k      End WithEnd Sub
Link para o comentário
Compartilhar em outros sites

Opa!
Valeu ae pela atenção.
Cara... Funcionou mas não funcionou
na vdd essa tabela de exemplo q mandei pra você é uma simplificada.
Testei nela e tudo funcionou direitinho.
o problema é que na original, esse X vem de uma fórmula que pega esses dados de outra planilha:
=SE('[Livros2.xlsm]VENDAS 1'!$H2="Livro Portugês Pré1";"X";" ")

já fiz alterções e a macro atualmente está assim:


Sub AgrupaCompras()
  Dim LR As Long, k As Long, c As Long, x As Long
  Dim ws1 As Worksheet, ws2 As Worksheet, rngM As Range
    Set ws1 = Sheets("VENDAS 2"): Set ws2 = Sheets("Livro de Vendas")
    ws2.Range(ws2.Range("A5:BP5"), ws2.Range("A5:BP5").End(xlDown)).ClearContents
    LR = ws1.Cells(Rows.Count, 1).End(xlUp).Row
    x = 5
      With ws2
        .Cells(5, 1).Resize(, 36).Value = ws1.Cells(5, 1).Resize(, 36).Value
          For k = 6 To LR
            Set rngM = .[b:B].Find(ws1.Cells(k, 2).Value, lookat:=xlWhole)
              If Not rngM Is Nothing Then
                c = ws1.Range(ws1.Cells(k, "F"), ws1.Cells(k, "BP")).Find("x").Column
                .Cells(rngM.Row, c) = "x"
                  If ws1.Cells(k, 1).Value > .Cells(rngM.Row, 1) Then
                    .Cells(rngM.Row, 1) = ws1.Cells(k, 1)
                  End If
              Else: x = x + 1
                .Cells(x, 1).Resize(, 36).Value = ws1.Cells(k, 1).Resize(, 36).Value
              End If
          Next k
      End With
End Sub


Tem como dar um jeito?

Link para o comentário
Compartilhar em outros sites

o problema é que na original, esse X vem de uma fórmula ...

 

 

 

acrescente a parte em vermelho

 

c = ws1.Range(ws1.Cells(k, "F"), ws1.Cells(k, "AJ")).Find("x", lookat:=xlValue).Column

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!