Excel Adressliste Duplikate Zusammenführen

Hallo Zusammen :smile:

ich habe eine Excel-Adressliste mit Kunden. Teilweise habe ich mehrere Kunden aus einer Familie. Nun möchte ich per Post Einladungen verschicken. Daher würde ich die „Duplikate“ in Form von mehreren Familienmitgliedern gerne zusammenfassen, sodas jeweils nur ein Brief an die entsprechende Adresse geht. Sind also „Nachname“ und „Adresse“ gleich, will ich die Duplikate löschen und in das Feld „Vorname“ den Wert „Familie“ eintragen. Duplikate löschen ist kein Problem, aber das Ersetzen macht mir Schwierigkeiten. Hat jemand eine Idee wie man das lösen kann?

Vielen Dank
viele Grüße
Dietmar

Hallo Zusammen :smile:

Hallo Dietmar,

ich habe eine Excel-Adressliste mit Kunden. Teilweise habe ich
mehrere Kunden aus einer Familie. Nun möchte ich per Post
Einladungen verschicken. Daher würde ich die „Duplikate“ in
Form von mehreren Familienmitgliedern gerne zusammenfassen,

Darf ich davon ausgehen, dass das Original unverändert bleiben soll? dann würde ich im ersten Schritt eine Kopie anlegen.

sodas jeweils nur ein Brief an die entsprechende Adresse geht.
Sind also „Nachname“ und „Adresse“ gleich, will ich die
Duplikate löschen und in das Feld „Vorname“ den Wert „Familie“
eintragen. Duplikate löschen ist kein Problem, aber das
Ersetzen macht mir Schwierigkeiten. Hat jemand eine Idee wie
man das lösen kann?

Darf ich davon ausgehen, dass die Familiennamen in benachbarten Zeilen geführt werden?
Mit VBA (Option für Dich?) könntest Du dann die ersten Einträge von Familienname und Adresse in einen „Container (Variable String)“ schreiben, und den Inhalt der nächsten Zeile damit vergleichen. Wenn identisch, dann zweite Zeile löschen und Vorname durch Familie ersetzen.

Vielen Dank

viele Grüße
Dietmar

Wenn das für Dich eine Option ist, kann ich gern beim VBA tatkräftig unterstützen.
MfG MwieMichel

Hallo MwieMichel,

Vielen Dank für Deine Antwort. VBA ist für mich natürlich eine Alternative, ich habe allerdings noch nie damit gearbeitet. Wenn Du mich unterstützen könntest wäre das toll! :smile: Wie fange ich wo am besten an, hast Du einen Vorschlag für eine Anfänger-Webseite auf der man das lernen kann?

Vielen Dank
viele Grüße
Dietmar

Hallo Dietmar,

die Excel-VBA Gemeinde ist riesig. Wenn Du danach googlest wirst Du teilweise mit Einsteigerseminaren als pdf belohnt. Ich habe bereits in einige günstige Bücher investiert. Empfehlen könnte ich „Einstieg in VBA mit Excel“ von Thomas Theis. Wenn es ins Detail geht bist Du im Internet wieder richtig bedient.

Mit Alt + F11 kommst Du auf die Entwicklungsumgebung und auch wieder zurück nach Excel. In die Entwicklungsumgebung werden wir das Makro schreiben und von Excel aus mit Alt + F8 (oder einem Kürzel) starten.
Welche Excel-Version benutzt Du? Du hast mir noch nicht gesagt, was mit den Duplikaten geschehen soll. In einer Liste löschen? markieren (formatieren)? zählen? in eine neue Datei speichern…?

Eine einzige Zelle wird für den Vergleich nicht ausreichen, denke ich. Wie wäre es also, wenn wir PLZ (Ort erübrigt sich damit), Straße und Hausnummer verwenden? Das wären drei Zellen, ggf. noch den Namen?
Nun sollten wir wissen, wie unsere beiden Dateien (workbook) heissen, und wie die Blattnamen (worksheet). Wir müssen wissen, in welchen Spalten die gewünschte Information steht. Dann gehen wir in Datei 1 auf Sheet X, lesen die Zellwerte in eine Stringvariable (Text) ein und vergleichen sie mit den entsprechenden Spalten allen Zeilen der zweiten Datei.

Gib mir die Spalten, (und welche der zu vergleichenden Information ich darin finden werde), die Dateinamen, Blattnamen, und sag mir was bei einem Treffer passieren soll, und ich mach mich ans Werk. Über das (vorläufige) Ergebnis können wir uns dann gern wieder unterhalten.

MfG MwieMichel

Hallo Dietmar,
sorry. Meine Antwort von eben… ich bin total verwirrt. Ich war mit meinen Gedanken bei einem anderen Beitrag. Sorry.
Also, die Eckpunkte bleiben. Aber wir haben nur eine Datei. Schlage vor, im ersten Schritt eine Kopie anzulegen, und im zweiten in einer Schleife durch alle Zeilen zu laufen und bei einem Treffer die Zeile zu löschen und den Namen mit „Familie“ zu ersetzen.
Wie verteilt sich die Adresse, bzw. in welchen Spalten finde ich welche Information.
Einen Entwurf (kommentiert) könnte ich kurzfristig liefern. Über das wie und warum können wir uns gern noch mal austauschen.
MfG MwieMichel

Guten Tag,

ich bin neu hier, daher nicht mit den üblichen Konventionen vertraut.

VBA ist natürlich der Königsweg, aber es geht auch ohne.

  1. Kopiere das Originalblatt in ein zweites Blatt
  2. Verkette die Alleinstellungsmerkmale Familienname, Straße, Hausnummer, PLZ in einer weiteren Spalte
  3. Lösche die Duplikate in dieser neuen Spalte
  4. neue Spalte im 2. Blatt, in der Du mit der fDunktion „zählenwenn“ die Anzahl der Alleinstellungsmerkmale im ersten Blatt ermittelst
  5. weitere neue Spalte im 2. Blatt mit einer wenn funktion: wenn(Anzahlalleinstellungsmerkmale>1 dann „Familie“ sonst Vorname)

Hoffe Du kannst mit der groben Darstellung etwas anfangen.

Hallo,

wenn sich der Aufwand lohnt, würde ich das über eine Pivottabelle machen. Adressen in der Tabelle zusammenfassen, und wenn die Anzahl der Personen an einer Adresse größer 1, „Familie“ nehmen.

Cheers, Felix

Hallo Dietmar,
kopiere Deine Adressliste. Zum Testen sowieso immer Kopie verwenden. Mit Alt + F11 auf Entwicklungsumgebung.
Unter Symbol- und Menüleiste links oben ist der Projekt-Explorer. Hier klickst Du Deine Excel-Kopie an. Menü Einfügen // Modul ergänzt eine Mappe Module 1. Die doppelklicken. Dann rechts (großes Fenster) diesen Text reinkopieren:

Option Explicit

Sub ZuSammen()
’ Variablen deklarieren
Dim Name1 As String, Adresse1 As String, Name2 As String
Dim Adresse2 As String, Zeile1 As Long, Zeile2 As Long
Dim MinZeile As Long, MaxZeile As Long, SpalteName As Integer
Dim SpalteAdresse As Integer, SpalteVorName As Integer
Dim VorName As String
’ Variablen initialisieren
VorName = „Familie“ 'Ersatztext bei einem Treffer
SpalteVorName = 1 'Spalte A (Vorname)
SpalteName = 2 'Spalte B (Nachname)
SpalteAdresse = 3 'Spalte C (Adresse)
MinZeile = 2 'Zeile 1 nicht prüfen
MaxZeile = ActiveWorkbook.ActiveSheet.UsedRange.Rows.Count
'Ende bei letzter belegter Zeile
’ Alles hier in der aktuellen Datei auf dem aktuellen Blatt
With ActiveWorkbook.ActiveSheet
’ äussere Schleife für 1. Zeile (Basis für Vergleich)
Application.ScreenUpdating = False 'Ergebnis erst mal nicht darstellen
For Zeile1 = MinZeile To MaxZeile 'wiederhole von Min bis Max
Name1 = Cells(Zeile1, SpalteName).Value 'Nachname und
Adresse1 = Cells(Zeile1, SpalteAdresse).Value 'Adresse Zeile1
Zeile2 = Zeile1 + 1 'eine Zeile weiter zum Vergleichen
For Zeile2 = Zeile2 To MaxZeile 'alle folgenden Vergleichen
Name2 = Cells(Zeile2, SpalteName).Value 'Nachname und
Adresse2 = Cells(Zeile2, SpalteAdresse).Value ’ Adresse Zeile2
If Name1 = Name2 Then 'erste Abfrage (Name)
If Adresse1 = Adresse2 Then 'zweite Abfrage (Adresse)
Rows(Zeile2).Delete 'bei Treffer zweite Zeile löschen
Cells(Zeile1, SpalteVorName).Value = VorName 'ändern
MaxZeile = MaxZeile - 1 'weil Zeile gelöscht
Zeile2 = Zeile2 - 1 'ebenso
End If 'Ende zweite
End If 'Ende erste Abfrage
Next 'zur nächsten Zeile Vergleich
Next 'zur nächsten Zeile Basis
Application.ScreenUpdating = True 'jetzt darstellen
End With 'Ende mit diesem Blatt, dieser Datei
End Sub 'Ende des Makros

Dann mit Alt + F11 zurück zu Excel. Evtl. Speichern. Jetzt mit Alt + F8 Makros aufrufen. Unter „Makros in:“ ggf. „Diese Arbeitsmappe“ auswählen. Jetzt links „ZuSammen“ (Makroname) auswählen (Linksklick) und Button „Ausführen“ oder „Run“.

Fertig.

Habe angenommen, dass Vorname in Spalte A (1), Nachname in Spalte B (2), und Adresse in Spalte C (3). Ausserdem angenommen, dass es eine Kopfzeile gibt. Daher MinZeile = 2.
Wenn meine Annahmen verkehrt sind, bitte melden. Lässt sich einfach anpassen.

Würd mich freuen, wenn Du mir einen Erfolg melden könntest… Wenn die Kommentierung (alles nach ') zu knapp ist, frag einfach.

MfG MwieMichel