rince1984
Mitglied
Hallo liebe Community,
ich bin auf der Suche nach einem Excel-Makro das anhand einer Spalte Duplikate findet und die Werte der Duplikatzeilen in der ersten Duplikatzeile zusammenführt (in neue Spalten).
Ich benutze Excel 2010.
Die Anzahl der Duplikate kann varieren, genauso die Anzahl der Gesamtspalten.
Als Beispiel ist folgender Tabellenaufbau gegeben:
Kundenummer | Geburtsdatum | Bemerkung
1234 | 10.08.1984 | Lorem ipsum
1234 | 23.07.1954 | dolor sit amet
1234 | 03.07.1982 | consetetur
1234 | 17.02.1985 | sadipscing
1234 | 28.08.2013 | elitr
5475 | 01.01.2011 | Lorem ipsum
63124 | 04.04.1964 | dolor sit amet
63124 | 05.09.2000 | consetetur
9999 | 06.05.2010 | sadipscing
Anforderung:
Der Anwender soll in Excel über eine InputBox angeben können welche Spalte nach Duplikaten durchsucht werden soll (in diesem Beispiel wäre Spalte A die richtige Wahl).
Wenn in der ausgewählten Spalte Duplikate gefunden wurden sollen diese in neuen Spalten zum ersten Treffer kopiert und anschließend die Duplikatzeilen gelöscht werden.
Ergebnis-Beispiel:
Kundennummer | Geburtsdatum | Bemerkung | Geburtsdatum #1 | Bemerkung #1 | Geburtsdatum #2 | Bemerkung #2 | Geburtsdatum #3 | Bemerkung #3 | Geburtsdatum #4 | Bemerkung #4
1234 | 10.08.1984 | Lorem ipsum | 23.07.1954 | dolor sit amet | 03.07.1982 | consetetur | 17.02.1985 | sadipscing | 28.08.2013 | elitr
5475 | 01.01.2011 | Lorem ipsum
63124 | 04.04.1964 | dolor sit amet | 05.09.2000 | consetetur
9999 | 06.05.2010 | sadipscing
Ziel:
Es soll am Schluss eine Excel-Tabelle entstehen in der die Inhalte mehrerer Datensätze mit der gleichen Kundennummer zu einem Datensatz zusammengeführt sind.
Nachdem es eine Lösung für Excel-Dateien mit unterschiedlichstem Aufbau sein soll brauche ich ein Makro. Formeln helfen mir nicht weiter, da diese bei jeder neuen Excel-Datei mit hohem Aufwand eingebunden werden müssten.
Ich habe bereits im Netz gesucht und ähnliche Ansätze gefunden, die aber nicht ausreichend sind. Geringe VBS-Kentnisse besitze ich zwar, aber keinerlei VBA-Kentnisse, weshalb ich die gefundenen Script nicht angepasst bekomme.
Folgendes Makro gefällt mir vom Aufbau her sehr gut, erfüllt aber leider nicht meine Anforderungen:
Das Makro splittet anhand des eingegebenen Werts die Zeilen in neue Spalten auf.
Beispiel:
Name | Vorname
Müller | Martin
Weber | Christian
Huber | Michael
Maier | Andrea
Walter | Christine
Kraus | Michaela
Eingabewert: 2
Die Anzahl der Zeilen wird durch 2 geteilt, Ergebnis ist dann 3. Die Zeilen werden nun auf 3 Bereiche aufgeteilt.
Ergebnis:
Name | Vorname | Name-1 | Vorname-1 | Name-2 | Vorname-2
Müller | Martin | Weber | Christian | Walter | Christine
Huber | Michael Maier | Andrea | Kraus | Michaela
Aus diesem Makro bräuchte ich:
- Inputbox
- Neue Spalten erzeugen und benennen
- Kopieren der erforderlichen Daten in die neuen Spalten
Das Makro müsste ich ergänzen um:
- Duplikate finden
- Duplikatzeilen in die neuen Spalten kopieren
- Kopierte Duplikatzeilen löschen
Ich hoffe unter euch schlauen Köpfen kann mir jemand helfen. Gerne auch mit einem anderen Makro-Ansatz der mein Ziel erfüllt.
Vielen Dank bereits vorab für alle die sich die Zeit nehmen meinen Beitrag zu lesen, sich Gedanken machen und mir Ansätze oder sogar eine Lösung geben!
LG
rince
ich bin auf der Suche nach einem Excel-Makro das anhand einer Spalte Duplikate findet und die Werte der Duplikatzeilen in der ersten Duplikatzeile zusammenführt (in neue Spalten).
Ich benutze Excel 2010.
Die Anzahl der Duplikate kann varieren, genauso die Anzahl der Gesamtspalten.
Als Beispiel ist folgender Tabellenaufbau gegeben:
Kundenummer | Geburtsdatum | Bemerkung
1234 | 10.08.1984 | Lorem ipsum
1234 | 23.07.1954 | dolor sit amet
1234 | 03.07.1982 | consetetur
1234 | 17.02.1985 | sadipscing
1234 | 28.08.2013 | elitr
5475 | 01.01.2011 | Lorem ipsum
63124 | 04.04.1964 | dolor sit amet
63124 | 05.09.2000 | consetetur
9999 | 06.05.2010 | sadipscing
Anforderung:
Der Anwender soll in Excel über eine InputBox angeben können welche Spalte nach Duplikaten durchsucht werden soll (in diesem Beispiel wäre Spalte A die richtige Wahl).
Wenn in der ausgewählten Spalte Duplikate gefunden wurden sollen diese in neuen Spalten zum ersten Treffer kopiert und anschließend die Duplikatzeilen gelöscht werden.
Ergebnis-Beispiel:
Kundennummer | Geburtsdatum | Bemerkung | Geburtsdatum #1 | Bemerkung #1 | Geburtsdatum #2 | Bemerkung #2 | Geburtsdatum #3 | Bemerkung #3 | Geburtsdatum #4 | Bemerkung #4
1234 | 10.08.1984 | Lorem ipsum | 23.07.1954 | dolor sit amet | 03.07.1982 | consetetur | 17.02.1985 | sadipscing | 28.08.2013 | elitr
5475 | 01.01.2011 | Lorem ipsum
63124 | 04.04.1964 | dolor sit amet | 05.09.2000 | consetetur
9999 | 06.05.2010 | sadipscing
Ziel:
Es soll am Schluss eine Excel-Tabelle entstehen in der die Inhalte mehrerer Datensätze mit der gleichen Kundennummer zu einem Datensatz zusammengeführt sind.
Nachdem es eine Lösung für Excel-Dateien mit unterschiedlichstem Aufbau sein soll brauche ich ein Makro. Formeln helfen mir nicht weiter, da diese bei jeder neuen Excel-Datei mit hohem Aufwand eingebunden werden müssten.
Ich habe bereits im Netz gesucht und ähnliche Ansätze gefunden, die aber nicht ausreichend sind. Geringe VBS-Kentnisse besitze ich zwar, aber keinerlei VBA-Kentnisse, weshalb ich die gefundenen Script nicht angepasst bekomme.
Folgendes Makro gefällt mir vom Aufbau her sehr gut, erfüllt aber leider nicht meine Anforderungen:
Code:
Option Explicit
Public Sub Aufraeumen()
Dim lFirstColumn As Long
Dim lLastColumn As Long
Dim lFirstRow As Long
Dim lLastRow As Long
Dim lLastColumnNew As Long
Dim iFactor As Integer
Dim lTotalRow As Long
Dim dBlockRow As Double
Dim lCopyFirstColumn As Long
Dim lCopyLastColumn As Long
Dim lCopyFirstRow As Long
Dim lCopyLastRow As Long
Dim i As Integer
Dim j As Integer
' Datenbereich abfragen
lFirstRow = 1
lFirstColumn = 1
lLastRow = Sheets(ActiveSheet.Name).UsedRange.SpecialCells(xlCellTypeLastCell).Row
lLastColumn = Sheets(ActiveSheet.Name).UsedRange.SpecialCells(xlCellTypeLastCell).Column
' Aufteilungsfaktor angeben
On Error Resume Next
iFactor = InputBox("Bitte geben Sie den 'Aufräumfaktor' (> 1) an:", "Aufräumfaktor", 0)
On Error GoTo 0
' ab Faktor > 1 soll aufgeteilt werden
If iFactor > 1 Then
' Anzahl Zeilenblock ausrechnen
lTotalRow = lLastRow - 1
dBlockRow = lTotalRow / iFactor
dBlockRow = WorksheetFunction.RoundUp(dBlockRow, 0)
lCopyFirstRow = lFirstRow + 1
lCopyLastRow = dBlockRow + 1
lTotalRow = lTotalRow - dBlockRow
' Wert der letzten Spalte einer neuen Variable zuweisen
lLastColumnNew = lLastColumn
For i = 2 To iFactor
' Überschrift
For j = 1 To lLastColumn
lLastColumnNew = lLastColumnNew + 1
Cells(lFirstRow, lLastColumnNew).Value = Cells(lFirstRow, j).Value & "-" & i
Next j
' neuen Block ausrechnen
On Error Resume Next
dBlockRow = lTotalRow / (iFactor - i + 1)
dBlockRow = WorksheetFunction.RoundUp(dBlockRow, 0)
lTotalRow = lTotalRow - dBlockRow
On Error GoTo 0
' Verschiebeaktion einbauen
lCopyFirstRow = lCopyLastRow + 1
lCopyFirstColumn = lFirstColumn
lCopyLastRow = lCopyLastRow + dBlockRow
lCopyLastColumn = lLastColumn
Range(Cells(lCopyFirstRow, lCopyFirstColumn), Cells(lCopyLastRow, lCopyLastColumn)).Cut
Cells(lFirstRow + 1, lLastColumnNew - lLastColumn + 1).Insert
Next i
Cells(1, 1).Select
End If
End Sub
Das Makro splittet anhand des eingegebenen Werts die Zeilen in neue Spalten auf.
Beispiel:
Name | Vorname
Müller | Martin
Weber | Christian
Huber | Michael
Maier | Andrea
Walter | Christine
Kraus | Michaela
Eingabewert: 2
Die Anzahl der Zeilen wird durch 2 geteilt, Ergebnis ist dann 3. Die Zeilen werden nun auf 3 Bereiche aufgeteilt.
Ergebnis:
Name | Vorname | Name-1 | Vorname-1 | Name-2 | Vorname-2
Müller | Martin | Weber | Christian | Walter | Christine
Huber | Michael Maier | Andrea | Kraus | Michaela
Aus diesem Makro bräuchte ich:
- Inputbox
- Neue Spalten erzeugen und benennen
- Kopieren der erforderlichen Daten in die neuen Spalten
Das Makro müsste ich ergänzen um:
- Duplikate finden
- Duplikatzeilen in die neuen Spalten kopieren
- Kopierte Duplikatzeilen löschen
Ich hoffe unter euch schlauen Köpfen kann mir jemand helfen. Gerne auch mit einem anderen Makro-Ansatz der mein Ziel erfüllt.
Vielen Dank bereits vorab für alle die sich die Zeit nehmen meinen Beitrag zu lesen, sich Gedanken machen und mir Ansätze oder sogar eine Lösung geben!
LG
rince