Excel: Mesclando várias linhas / colunas com base em uma célula repetida

-2

Eu preciso mesclar as informações de várias linhas e colunas com base em um valor comum para uma célula específica.

Acho que posso usar uma macro aqui, pois o problema é que tenho que mesclar muitas informações, onde para algumas linhas algumas colunas estão em branco e outras têm informações.

Os valores nas células que preciso usar para mesclar as linhas podem aparecer mais de uma vez.

Estou adicionando uma imagem na qual você pode ver a estrutura do documento e parte da lista de valores repetidos para a coluna "Email". Eu o examino com a função VLOOKUP e existem cerca de 3000, enquanto a planilha possui cerca de 5000 linhas.

Exemplo 1

insira a descrição da imagem aqui

Exemplo 2

insira a descrição da imagem aqui

Juan Francisco
fonte
Eu não consigo te entender completamente. Você tem uma ONG em cada linha. Na coluna, Dvocê tem um email e outro email na coluna O. Às vezes é o mesmo, e às vezes é diferente. Com base nisso, você deseja mesclar algo, mas não está explicando o que.
jcbermu
Eu sei que minha explicação pode ser confusa, desculpe! Quero mesclar todas as informações disponíveis para cada ONG, quando a ONG é repetida. Para isso, eu usaria o email na coluna D, porque é o campo mais provável de ser comum quando a ONG é a mesma (o nome pode ser um pouco diferente e ser a mesma ONG). A coluna O mostra os e-mails repetidos que encontrei (3000); portanto, a explicação seria que existem 3000 ONGs repetidas no arquivo. Como as ONGs podem ter dados diferentes nas colunas, dependendo da linha, preciso mesclá-las! está claro agora?
Juan Francisco
Então, você está procurando ONGs duplicadas com base no email?
Burgi
Sim, e quero mesclar todas as informações de cada ONG em uma linha
Juan Francisco

Respostas:

0

Com VBA / Macros:

Public Sub myDuplicates()
    Dim wks As Worksheet
    Set wks = ActiveSheet
    emailcolumn = 4
    totalcolumns = 12
    merges = 0
    theSymbol = " / "
    Application.ScreenUpdating = False
    lastRow = wks.Cells(Rows.Count, "A").End(xlUp).Row
    For i = lastRow To 1 Step -1
        email1 = wks.Cells(i, emailcolumn)
        For j = i - 1 To 2 Step -1
            email2 = wks.Cells(j, emailcolumn)
            If LCase(email1) = LCase(email2) Then
                For k = 1 To totalcolumns
                    If LCase(Cells(i, k)) <> LCase(Cells(j, k)) Then
                        Cells(j, k) = Cells(j, k) & theSymbol & Cells(i, k)
                    End If
                Next k
                wks.Rows(i).Delete
                j = 1
                merges = merges + 1
            End If
        Next j
    Next i
    Application.ScreenUpdating = True
    theMessage = MsgBox("Finished with " & merges & " merges", vbInformation)
End Sub

Abra VBA / Macros, insira um novo módulo em ThisWorkbook e cole esse código no lado direito.

Quando dois e-mails são iguais, ele mescla apenas todos os campos diferentes . E use /para separá-los dentro da célula.

Supõe que seu campo de email seja a quarta coluna. Ele pode ser alterado usando a variável emailcolumne também assume que sua coluna máxima é 12; também pode ser facilmente alterada na variável totalcolumns.

jcbermu
fonte
Obrigado por sua ajuda, mas não funcionou .. apenas retire 200 linhas (é suposto levar 3000).
Juan Francisco
Ele calcula o número de linhas da coluna A. A linha lastRow = wks.Cells(Rows.Count, "A").End(xlUp).Row.
jcbermu
Ele calcula o número de linhas da coluna A. A linha lastRow = wks.Cells(Rows.Count, "A").End(xlUp).Row. Se houver uma célula em branco na coluna A, ela começará a partir de então. Se você souber o número de linhas (por exemplo, 3000), substitua essa linha por lastRow=3000e ela deve funcionar.
Jcbermu # 27/15