Excel-Zeilen in einer Tabelle verknüpfen

Excel-Zeilen in einer Tabelle verknüpfen

Ist es in Excel möglich, eine Tabelle wie diese zu erstellen:

Bildbeschreibung hier eingeben

Und machen Sie so etwas:

Bildbeschreibung hier eingeben

Wenn also zwei oder mehr Personen mit der gleichen Adresse in der Tabelle vorhanden sind, möchte ich die Zeilen verbinden, indem ich alle Namen in nur eine Zelle und die gemeinsame Adresse in die andere schreibe.

Antwort1

Pseudocode, um dies in VBA zu tun: (Sie können den echten Code herausfinden). Beachten Sie, dass dies nur in der Antwort geschrieben wurde, sodass Sie die Lücken ausfüllen müssen, aber hoffentlich haben Sie eine allgemeine Vorstellung davon, wie Sie jede Adresse durchgehen und alle Namen sammeln, die eine Spalte haben, die mit dieser Adresse übereinstimmt.

dim address_on as string 'current address
dim names as string 'concatenate list of names
dim in_list_already as boolean

    For address_row = 1 to range().end(xldown).row
    'loop through addresses
        address_on = Range("Column" & address_row).value
        names = ""

        'First check if address_on is already in destination list?
        in_list_already = false
        for check_row = 1 to range("Destination").end(xldown).row
            If range("Destination Col" & check_row).value = address_on then
                in_list_already = true
                Exit for
            End if
        next

        if in_list_already = false then
            'Find all names that have this address
            for name_row = 1 to range().end(xldown).row
                If range("Address Column" & name_row).value = address_on then
                    names = names  & Range("Name Column" & name_row).value & ","
                End if
            next

            'remove last comma
            names = names.remove(Len(names)-1,1)

            'add to list
            Range("Column to insert to 1" & next_slot).value = names
            Range("Column to insert to 2" & next_slot).value = address_on 

        End if 

next

Wie Sie sehen, names = names & Range("Name Column" & name_row).value & ","wird es einfach an die Liste angehängt, wenn eine Übereinstimmung vorliegt.

Die obige Methode ist:

  1. Durchlaufen Sie Ihre Daten
  2. Existiert das Element bereits in der Ausgabe? Wenn nicht, dann zeige es nicht an (damit es keine Duplikate gibt).
  3. Sammeln Sie alle Namen mit der Adresse, unter der Sie sich befinden
  4. Ausgabeergebnisse

Antwort2

Dies lässt sich mithilfe von Formeln problemlos bewerkstelligen, wenn die Datensätze wie in der Frage aggregiert werden (komplizierter ist es, wenn die übereinstimmenden Adressen nicht zusammenliegen):

Bildbeschreibung hier eingeben

Einblenden von Spalten zum Anzeigen der Methode:

Bildbeschreibung hier eingeben

Ich habe zwei Hilfsspalten erstellt, eine für die Namen und eine zum Filtern. Um die gewünschte Reihenfolge in der Frage zu erreichen, habe ich links die Hilfsspalte für die Namen eingefügt. Die Formel in A2:

=IF(C2=C1,A1& ", " &B2,B2)

Spalte C ist bei mir die Adressspalte. Sie prüft, ob die Adresse in der aktuellen Zeile mit der in der vorherigen Zeile übereinstimmt. Wenn nicht, bedeutet das, dass es sich um eine neue Adresse handelt, und fügt den zugehörigen Namen ein. Wenn es dieselbe Adresse wie die vorherige ist, wird ein Komma und der Zeilenname mit dem Ergebnis in der vorherigen Zeile verknüpft (Sie können also eine beliebige Anzahl übereinstimmender Adressen haben).

Die Hilfsspalte D prüft, ob die Adresse der Zeile die letzte für diese Adresse ist (d. h., die Adresse der nächsten Zeile ist anders). Die Formel in D2:

=C2<>C3

Nachdem Sie die Formeln in die Spalten eingetragen haben, klicken Sie im Menü auf D1 und Autofilter. Deaktivieren Sie im Pulldown-Menü D1 die Option FALSE. Dadurch werden alle Zeilen ausgeblendet, die nicht die letzte Zeile für jede Adresse sind.

Wenn Sie eine permanente, „saubere“ Liste wünschen, kopieren Sie die gewünschten gefilterten Spalten und fügen Sie sie an einer neuen Stelle ein. Nur die sichtbaren werden kopiert, wie in meinen Spalten F und G unten:

Bildbeschreibung hier eingeben

Sie können einfügen, während der Filter aktiviert ist. Wenn Sie jedoch in einen Bereich einfügen, für den Zeilen ausgeblendet sind, bleiben einige Ihrer Ergebnisse ausgeblendet, bis Sie den Filter deaktivieren.

Antwort3

Ich möchte eine UDF (User Defined Function) vorschlagen, die das Problem lösen wird.

Bildbeschreibung hier eingeben

Wie es funktioniert:

  • Ich gehe davon aus, dass die Quelldaten im Bereich liegen A2:B8.
  • Geben Sie diese Array (CSE) Formel in ein E2, beenden Sie mitStrg+Umschalt+Eingabe& Abfüllen.

    {=INDEX($B$2:$B$8, MATCH(SMALL(IF(COUNTIF($E$1:E1, $B$2:$B$8)=0, COUNTIF($B$2:$B$8, "<"&$B$2:$B$8), " "), 1), COUNTIF($B$2:$B$8, "<"&$B$2:$B$8), 0))}
    
  • KopierenUndPasteunten angezeigter Code als Modul.

    Function ExtractinOneCell(LookupValue As String, LookupRange As Range, ColumnNumber As Integer, Char As String)
    
    Dim I As Long
    
    Dim xRet As String
    For I = 1 To LookupRange.Columns(2).Cells.Count
    
        If LookupRange.Cells(I, 2) = LookupValue Then
            If xRet = "" Then
                xRet = LookupRange.Cells(I, ColumnNumber) & Char
            Else
                xRet = xRet & "" & LookupRange.Cells(I, ColumnNumber) & Char
            End If
        End If
    
    Next
    
    ExtractinOneCell = Left(xRet, Len(xRet) - 2)
    
    End Function
    
  • Geben Sie diese Formel ein D2und füllen Sie sie aus.

    =ExtractinOneCell(E2,$A$2:$B$8,1,", ")
    

verwandte Informationen