Excel: Zusammenführen mehrerer Zeilen / Spalten basierend auf einer wiederholten Zelle

-2

Ich muss fusionieren die Informationen von mehreren Zeilen und Spalten für eine bestimmte Zelle basierend auf einem gemeinsamen Wert.

Ich glaube , ich hier ein Makro verwenden können, wie das Problem ist , ich habe zu verschmelzen viele Informationen, wo für einige Zeilen einige Spalten leer sind und andere haben Informationen.

Die Werte in den Zellen, die ich zum Zusammenführen der Zeilen verwenden muss, werden möglicherweise mehrmals angezeigt.

Ich füge ein Bild hinzu, in dem Sie die Struktur des Dokuments und einen Teil der Liste der wiederholten Werte für die Spalte "E-Mail" sehen können. Ich überprüfe es mit der VLOOKUP-Funktion und es gibt ungefähr 3000, während das Blatt ungefähr 5000 Zeilen hat.

Beispiel 1

Bildbeschreibung hier eingeben

Beispiel 2

Bildbeschreibung hier eingeben

Juan Francisco
quelle
Ich kann dich nicht ganz verstehen. Sie haben eine NGO in jeder Reihe. In der Spalte haben DSie eine E-Mail und eine andere E-Mail in der Spalte O. Manchmal ist es dasselbe und manchmal ist es anders. Basierend darauf möchten Sie etwas zusammenführen, aber Sie erklären nicht, was.
JCBERMU
Ich weiß, dass meine Erklärung verwirrend sein kann, sorry! Ich möchte alle verfügbaren Informationen für jede NGO zusammenführen, wenn die NGO wiederholt wird. Dafür würde ich die E-Mail-Adresse in Spalte D verwenden, da dies das wahrscheinlichste Feld ist, das häufig vorkommt, wenn die NRO identisch ist (der Name kann geringfügig abweichen und dieselbe NRO sein). Die Spalte O zeigt die wiederholten E-Mails, die ich gefunden habe (3000). Die Erklärung wäre also, dass 3000 NGOs in der Datei wiederholt sind. Da die NGOs in den Spalten je nach Zeile unterschiedliche Daten haben können, muss ich sie zusammenführen! ist jetzt klar?
Juan Francisco
Sie suchen also nach doppelten NGOs, die auf der E-Mail basieren?
Burgi
Ja, und ich möchte alle Informationen für jede NGO in einer Zeile zusammenfassen
Juan Francisco,

Antworten:

0

Mit VBA / Makros:

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

Öffnen Sie VBA / Macros, fügen Sie ein neues Modul unter ThisWorkbook ein und fügen Sie diesen Code auf der rechten Seite ein.

Wenn zwei E-Mails identisch sind, werden nur die verschiedenen Felder zusammengeführt. Und verwenden Sie /, um sie in der Zelle zu trennen.

Angenommen, Ihr E-Mail-Feld ist die vierte Spalte. Sie kann mithilfe der Variablen geändert werden emailcolumnund setzt voraus, dass Ihre maximale Spalte 12 ist. Sie kann auch problemlos mithilfe der Variablen geändert werden totalcolumns.

jcbermu
quelle
Vielen Dank für Ihre Hilfe, aber es hat nicht funktioniert. Nehmen Sie nur 200 Zeilen weg (es wird angenommen, dass Sie 3000 nehmen).
Juan Francisco
Es berechnet die Anzahl der Zeilen aus Spalte A. Die Zeile lastRow = wks.Cells(Rows.Count, "A").End(xlUp).Row.
JCBERMU
Es berechnet die Anzahl der Zeilen aus Spalte A. Die Zeile lastRow = wks.Cells(Rows.Count, "A").End(xlUp).Row. Befindet sich in Spalte A eine leere Zelle, beginnt diese von da an. Wenn Sie die Anzahl der Zeilen kennen (z. B. 3000), ersetzen Sie diese Zeile durch lastRow=3000und es sollte funktionieren.
Jcbermu