Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1572to1576
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datenzusammenführung

Datenzusammenführung
18.08.2017 15:23:10
Nils
Hallo zusammen,
Ziel ist es, die teilweise mit Duplikaten zusammengeführten Daten - Kunde vs Email - aus diversen Quelle so komprimieren, dass eine Auflistung dieser beiden Komponenten ohne jegliche Mehrfachdaten erzeugt wird.
Exemplarisch dargestellt durch die Datenbank, auf die zugegriffen wird (Tab. Datenbasis) und der aus diesen Daten neu zu erzeugenden Übersicht (Tab. Ziel)
https://www.herber.de/bbs/user/115564.xlsx
Hat jemand dafür einen Lösungsansatz – mit oder ohne VBA?
Herzlichen Dank und viele Grüße
Nils

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datenzusammenführung
18.08.2017 16:05:04
ChrisL
Hi Nils
Manuelle Lösung:
1. Matrix auflösen
- A:B kopieren
- Spalte B löschen
- A:B kopieren
- Spalte B löschen
- A:B kopieren
2. Sortieren (Leerzellen weg)
3. Spezialfilter, keine Duplikate
cu
Chris
AW: Datenzusammenführung
18.08.2017 18:00:30
Nils
Hallo Chris,
vielen Dank für Deinen Lösungsansatz! Grundsätzlich würde das so funktioneren.
Da die Datenbank(en) allerdings fortlaufend aktualisiert werden, wäre der manuelle Aufwand leider sehr hoch und setzt außerdem voraus, dass man jedesmal eine Kopie des Datenblattes anfertigt, um den Originalaufbau nicht zu "zerschießen". Ideal wäre ein Makro, dass diese Routine durchläuft oder alternativ eine Formellösung. Da ich in VBA nur Grundkenntnisse habe, bin ich an dieser Hinsicht überfordert und eine pragmatische Formelösung mit Hilfsspalte o.ä. fällt mir partout nicht ein.
Beste Grüße und ein schönes Wochenende,
Nils
Anzeige
AW: Datenzusammenführung
18.08.2017 18:20:25
Robert
Hallo Chris,
nachstehendes Makro müsste Deine Wünsche erfüllen:
Sub DatenZusammen()
Dim rng As Range, iZeile As Integer, iSpalte As Integer, Zielzeile As Integer
Set rng = Worksheets("Datenbasis").Range("A2").CurrentRegion
Worksheets("Ziel").Cells(1, 1) = "Kunde"
Worksheets("Ziel").Cells(1, 2) = "Emails"
Zielzeile = 2
'Die einzelnen Eintragungen in die Zieltabelle kopieren
For iZeile = 2 To rng.Rows.Count
For iSpalte = 2 To 4
If rng.Cells(iZeile, iSpalte)  "" Then
Worksheets("Ziel").Cells(Zielzeile, 1) = rng.Cells(iZeile, 1)
Worksheets("Ziel").Cells(Zielzeile, 2) = rng.Cells(iZeile, iSpalte)
Zielzeile = Zielzeile + 1
End If
Next iSpalte
Next iZeile
'Duplikate entfernen
Worksheets("Ziel").Cells(1, 1).CurrentRegion.RemoveDuplicates Columns:=Array(1, 2), Header:= _
xlYes
End Sub
Gruß
Robert
Anzeige
AW: Datenzusammenführung
18.08.2017 18:32:58
Nils
Hallo zusammen,
herzlichen Dank! Beide Makros sind zielführend, das hilft mir sehr.
Allen nochmals ein schönes Wochenende, beste Grüße
Nils
AW: Datenzusammenführung
18.08.2017 19:34:31
Luschi
Hallo Nils,
für solche Standard-Aufgaben nehme ich am liebsten Power-Query:
- keine Zeile Vba-Code programmiert
- alles mit der Maus geklickt
- Datenbasis beliebig erweiterbar!
- einzige Voraussetzung: Datenbereich in 'formatierte Tabelle' umwandeln!
https://www.herber.de/bbs/user/115571.xlsx
Gruß von Luschi
aus klein-Paris
AW: ergänzend hierzu ...
19.08.2017 11:08:26
...
Hallo Luschi, hallo Nils,
... Power-Query steht in Excel 2010 standardmäßig noch nicht zur Verfügung. Nils, Du kannst Dir es aber kostenfrei von der Microsoft-Seite herunterladen und installieren.
Gruß Werner
.. , - ...
Anzeige
AW: ergänzend hierzu ...
19.08.2017 11:30:36
Luschi
Hallo Werner,
bist Du schon ein bischen/stark in PQ eingearbeitet, fragt sich Luschi?
Ich taste mich so langsam ran, es ist eben doch Einiges dafür zu tun.
Gruß von Luschi
aus klein-Paris
AW: ergänzend hierzu ...
19.08.2017 12:40:09
Nils
Hallo zusammen,
von Power-Query habe ich bisher nichts gehört, klingt sehr interessant!
Zumal ich bisher nicht die Zeit gefunden habe, mich ausreichend in das Thema VBA einzuarbeiten.
Habe letztes Jahr einen Wochenendkurs belegt, das vermittelte Wissen reicht aber max., um vorgegebene Markos etwas zu modifizieren - für eigeninitiativ erstellte Codes reicht das Know-How nicht.
Habe mir auf der MS-Seite gerade einen groben Überblick zu PW verschafft. Lohnt es denn aus eurer Sicht, hier tiefer einzusteigen, wenn man viel mit Datenbankauswertung- und Analyse zu tun hat?
Viele Grüße
Nils
Viele Grüße
Nils
Anzeige
AW: ergänzend hierzu ...
20.08.2017 08:21:31
Luschi
Hallo Nils,
PowerPivot und PowerQuery sind Kraftpakete, um viele Daten aus unterschiedlichsten Datenquellen in Excel einzulesen und zu behandeln:
- viele/alle Dateien in einem Verzeichnis
- Datenkorektur, wenn die Spaltzenamen nicht in der selben Reihenfolge vorliegen
- Ausertung/Vergleich von Zeiträumen unterschiedlicher Jahre/Quartale/Monate/KW/u.u.u
Aber schau mal hier:

https://www.video2brain.com/de/videotraining/excel-2013-power-query?autoplay=1
https://www.video2brain.com/de/videotraining/excel-2016-2013-pivot-berichte-mit-datenmodell-verbessern
Da gibt es neben der Übersicht auch 3-4 freie Videos zu anschauen.
Die integrierten Scriptsprachen (leider nicht Vba) vereinfachen wesentlich das Anpassen bereits erstellter Abfragen/Pivotberichte auf neue/geänderte Voraussetzungen.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: nun ...
21.08.2017 10:08:51
...
Hallo Luschi,
... ich habe es beim "Tasten" belassen. Ich konnte so aber schon feststellen, dass PQ es eine wirklich sehr leistungsfähige Funktionalität ist, für die ich jedoch für mich persönlich keine wirkliche Verwendung (mehr) sehe.
Für die hier im thread gestellte Problematik ist PQ sicherlich eine gute Lösung für Nutzer, die PQ schon nutzen bzw. künftig auch nutzen könnten und für die eine VBA-Lösung aus welchen Grund auch immer nicht in Frage kommt. Ich persönlich hätte natürlich eine Formellösung eingesetzt, die aber auf den ersten Blick zugegebener maßen nicht gerade einfach zu erstellen scheint. Es sei denn, es wäre auch eine etwas andere Ergebniszusammenstellung möglich, dann würde eine Formel ausreichend sein.
Gruß Werner
.. , - ...
Anzeige
AW: Datenzusammenführung
18.08.2017 18:26:05
KlausF
Hallo Nils,
probier mal:
Sub Verdichten()
Dim rng As Range
Dim rngBereich As Range
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
'________________________________________ anpassen
Set wksQuelle = Worksheets("Datenbasis")
Set wksZiel = Worksheets("Ziel")
Dim i As Long
Dim lastRow As Long
lastRow = wksQuelle.Cells(Rows.Count, "A").End(xlUp).Row
Application.ScreenUpdating = False
With wksQuelle
.Range("A3:B" & lastRow).Copy wksZiel.Range("A2")
.Range("C3:C" & lastRow).Copy wksZiel.Range("B" & wksZiel.Cells(Rows.Count, "A").End(xlUp). _
Row + 1)
.Range("A3:A" & lastRow).Copy wksZiel.Range("A" & wksZiel.Cells(Rows.Count, "A").End(xlUp). _
Row + 1)
.Range("D3:D" & lastRow).Copy wksZiel.Range("B" & wksZiel.Cells(Rows.Count, "A").End(xlUp). _
Row + 1)
.Range("A3:A" & lastRow).Copy wksZiel.Range("A" & wksZiel.Cells(Rows.Count, "A").End(xlUp). _
Row + 1)
End With
With wksZiel
.Range("A2:B" & .Cells(Rows.Count, "A").End(xlUp).Row).Sort _
Key1:=.Range("A2"), Order1:=xlAscending, _
Header:=xlNo
.Range("B2:B" & .Cells(Rows.Count, "A").End(xlUp).Row).SpecialCells(xlCellTypeBlanks). _
EntireRow.Delete
Set rngBereich = .Range("B2:B" & .Cells(Rows.Count, "A").End(xlUp).Row)
For Each rng In rngBereich
If Application.WorksheetFunction.CountIf(rngBereich, rng.Value) > 1 Then
rng.EntireRow.Delete
End If
Next
End With
Set wksQuelle = Nothing
Set wksZiel = Nothing
Set rng = Nothing
Set rngBereich = Nothing
End Sub
Gruß
Klaus
Anzeige
AW: Datenzusammenführung
20.08.2017 18:56:28
Piet
Hallo KlausF, hallo Nils
ich habe mir den Code von Klaus angesehen und meine man könnte diesen Teil durch lz = LastCell eleganter schreiben.
Das ist bitte keine Kritik, ich vereinfache mir damit manchmal lange Syntacen.
mfg Piet
With wksQuelle
lz = wksZiel.Cells(Rows.Count, "A").End(xlUp).Row + 1
.Range("A3:B" & lastRow).Copy wksZiel.Range("A2")
.Range("C3:C" & lastRow).Copy wksZiel.Range("B" & lz)
.Range("A3:A" & lastRow).Copy wksZiel.Range("A" & lz)
.Range("D3:D" & lastRow).Copy wksZiel.Range("B" & lz)
.Range("A3:A" & lastRow).Copy wksZiel.Range("A" & lz)
End With

Anzeige
in diesem Fall nicht
20.08.2017 21:09:59
KlausF
Hallo Piet,
"normal" hast Du recht, in diesem Fall aber nicht. Die letzte Zeile muss pro
Durchlauf neu ermittelt werden weil der Text jeweils an den neuen Block unten
angehängt wird. Zum testen:
https://www.herber.de/bbs/user/115602.xls
Gruß
Klaus
AW: in diesem Fall nicht
20.08.2017 23:08:15
Piet
Hallo Klaus
Sorry, du hast Recht, da habe ich nicht aufgepasst. Meine Idee klappt nicht.
Beim Testen ist mir aufgefallen das der Button in der Zieltabelle nicht auf Option "FreeFloting" steht.
Beim dritten mal Makro ausführen sieht man ihn durch Zellen löschen nur noch als Strich.
Der Frager muss in für Dauerbetrieb in den Eigenschaften anders einstellen: - Free Floting
mfg Piet
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige