Ich habe eine Masterliste mit verschiedenen Spalten, bspw.
Name, Rufnummer, Adresse, …. Diese wird momentan von verschiedenen Leuten befüllt. Jetzt möchte ich aber, dass jeder dieser Leute seine eigene Liste mit den gleichen Spalten hat und diese dann auf Knopfdruck in einer Masterliste zusammengeführt werden können.
Ich habe mir das so vorgestellt, dass ich ein Tabellenblatt mit der Masterliste habe und dann noch Tabellenblätter für die einzelnen Bearbeiter, also bspw. Anne, Stefan, … Nun benötige ich also ein Makro, das zuerst die Masterliste scannt, wo die erste nichtleere Zeile ist. Diese wird als Zeile „Start“ definiert. Dann scannt es das erste Bearbeiterblatt (z.B. „Anne“, das ja genau die gleichen Spalten hat wie die Masterliste) danach ab, wo die erste nichtleere Zeile ist, dann wird „Stop“ als diese Zeile -1 definiert. Dann werden aus diesem Tabellenblatt alle Zeilen von 2 (Zeile 1 sind die Tabellenüberschriften) bis Zeile „Stop“ kopiert und in die Masterliste eingefügt. Und so geht es dann auch mit den anderen Bearbeiterlisten weiter.
So weit so gut, habe ich mir alles ganz einfach vorgestellt aber das ist es irgendwie doch nicht^^
Sub Tabellenzusammenführen()
Dim start As Integer, stopp As Integer
If Sheets(„Masterliste“).Range(„A1:A200“).Value = " " Then start = row
If sheets („Anne“) .Range(A1:A200") .Value = " " then stop = row
Ich weiß, das ist alles ziemliches gestümper, aber ich weiß iwie gar nicht, wie ich das richtig machen kann. Kannst du mir bitte bitte helfen, wie ich da weiterkommen könnte? Besonders wie man die Spalten richtig benennt usw.?
Vielen, vielen Dank
der entscheidende Fehler ist das du jede Zeile scannen musst mit einer schleife und keinen Range verwenden kannst. Die meisten Makro Probleme lassen ganz einfach lösen, dazu wäre interessant warum jeder Bearbeiter ein extra Blatt bekommt? Sollen die Daten aus masterliste Und der jeweiligen Liste verglichen werden ob sich etwasverändert hat Oder einfach unten angefügt werden?
Sry für die Tippfehler bin Gerarde unterwegs kannst du mir bitte noch ein paar Infos zur Sachlichkeit geben danke
Das Zusammenführen sollte überhaupt kein Problem sein. Falls Du das Problem noch nicht gelöst hast, schicke mir einfach mal Deine Datei, ich kann Dir das recht schnell einbauen. Du kannst auch gerne die Daten vorher entfernen - mir langt der Tabellenaufbau.
Allerdings bin ich heute temporr in Besprechungen unterwegs, weiß also nicht, wie schnell ich reagieren kann.
Ich komme leider momentan nicht dazu, das Problem zu lösen. Falls die Sache noch bis zum Wochenende oder Anfang/Mitte nächster Woche Zeit hat, kann ich gerne helfen!
Option Explicit
Sub Tabellenzusammenfuehren()
Dim wksMaster, wksEditor As Worksheet
Dim lngLastRowMaster As Long
'Masterliste definieren
Set wksMaster = ThisWorkbook.Sheets("Masterliste")
'Für jedes Worksheet
For Each wksEditor In ThisWorkbook.Worksheets
'Ausser wenn es genauso heißt wie die Masterliste
If wksEditor.Name wksMaster.Name Then
'kopiere Zeilen 2 bis erste leere Zeile
With wksEditor
.Rows("2:" & FirstEmptyRow(wksEditor) - 1).Copy
End With
'Suche erste leere Zeile in Masterliste
lngLastRowMaster = FirstEmptyRow(wksMaster)
'Einfügen der Zwischenablage in erster leerer Zeile
With wksMaster
Range(.Cells(lngLastRowMaster, 1), .Cells(lngLastRowMaster, 1)).PasteSpecial xlPasteValues
End With
End If
'Nächstes Worksheet
Next wksEditor
Application.CutCopyMode = False
End Sub
Function FirstEmptyRow(ByVal wks As Worksheet) As Long
With wks.UsedRange
FirstEmptyRow = CStr(.Row + .Rows.Count)
End With
End Function
vielen Dank für deine Hinweise, ich konnte das jetzt auch wirklich ganz einfach mit einer for-next-schleife lösen .
Es ging bei der Tabelle darum, dass jeder eine eigene Tabelle hat und sie schützen kann, damit keiner behaupten kann, dass jemand anders etwas daran geändert hat (paranoid, wenn du mich fragst )und die Daten aber danach trotzdem noch einmal in einer Liste komplett zusammengefügt sind.
Dankeschön, es hat sich toller weise schon eine Lösung gefunden.
VBMicha hat mir das Ganze mit einer for-next-schleife gelöst und das funktioniert wunderbar,
aber vielen dank für deine antwort .