Supportnet / Forum / Tabellenkalkulation
Datensätze mittels VBA mehrfach kopieren
Frage
Hallo,
Ich habe z.B. in "Tabelle 1" folgende drei Datensätze:
-------------A---------------B---------------C
1 ----- Vorname --- Nachname --- Anzahl
2 ------- Sepp -------- Muster --------- 3
3 ------- Franz -------- Klein ----------- 1
4 ------- Peter -------- Maier ----------- 2
Nun möchte ich die einzelnen Datensätze in die "Tabelle 2" so oft ausgeben, wie es in der Spalte C angeben ist.
Das Ziel wäre nun in etwa die folgendes in der "Tabelle 2" zu generieren:
-------------A---------------B---------------C
1 ----- Vorname --- Nachname
2 ------- Sepp ------- Muster
3 ------- Sepp ------- Muster
4 ------- Sepp ------- Muster
5 ------- Franz ------- Klein
6 ------- Peter ------- Maier
7 ------- Peter ------- Maier
Weiß da jemand von euch Rat wie sowas zu lösen ist?
Danke im voraus für euere Hilfe
mfg Peter
Antwort 1 von Hajo_Zi
Hallo Peter,
Option Explicit
Sub kopieren()
Dim LoI As Long
Dim LoJ As Long
Dim LoK As Long
Dim LoLetzte As Long
´ unabhängig von Excelversion für Spalte A (1)
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Range("A1:B1").Copy Worksheets("Tabelle5").Range("A1")
LoJ = 2
For LoI = 2 To LoLetzte
For LoK = 1 To Cells(LoI, 3)
Range(Cells(LoI, 1), Cells(LoI, 2)).Copy Worksheets("Tabelle5").Cells(LoJ, 1)
LoJ = LoJ + 1
Next LoK
Next LoI
End Sub
Gruß Hajo
Option Explicit
Sub kopieren()
Dim LoI As Long
Dim LoJ As Long
Dim LoK As Long
Dim LoLetzte As Long
´ unabhängig von Excelversion für Spalte A (1)
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Range("A1:B1").Copy Worksheets("Tabelle5").Range("A1")
LoJ = 2
For LoI = 2 To LoLetzte
For LoK = 1 To Cells(LoI, 3)
Range(Cells(LoI, 1), Cells(LoI, 2)).Copy Worksheets("Tabelle5").Cells(LoJ, 1)
LoJ = LoJ + 1
Next LoK
Next LoI
End Sub
Gruß Hajo
Antwort 2 von urbi
Hallo Hajo,
Ich danke dir für die prompte Antwort.
Der Code läuft natürlich einwandfrei.
Super wäre wenn du den Code noch ein wenig detailierter kommentieren könntest.
Somit würden vielleicht meine Chancen, den VBA-Code zumindest einmal ansatzweise zu erlernen, nicht schlecht stehen. ;-)
nochmals Danke für deine Mühen
mfg Peter
Ich danke dir für die prompte Antwort.
Der Code läuft natürlich einwandfrei.
Super wäre wenn du den Code noch ein wenig detailierter kommentieren könntest.
Somit würden vielleicht meine Chancen, den VBA-Code zumindest einmal ansatzweise zu erlernen, nicht schlecht stehen. ;-)
nochmals Danke für deine Mühen
mfg Peter
Antwort 3 von Hajo_Zi
Hallo Peter,
der Code ist doch nicht kompliziert, man muß doch nur Zeile für Zeile durchgehen.
Erst den Tabellenkopf kopieren, dann eine Schleife für die Namen und darin eine Schleife für die Anzahl.
Gruß Hajo
der Code ist doch nicht kompliziert, man muß doch nur Zeile für Zeile durchgehen.
Erst den Tabellenkopf kopieren, dann eine Schleife für die Namen und darin eine Schleife für die Anzahl.
Gruß Hajo
Antwort 4 von urbi
Hallo Hajo,
Tja - aus deiner Sicht ist das sicher so aber ......
Ich hätte gerne noch eine dritte Daten-Spalte in "Tabelle1 " hinzugefügt, welche auf die "Tabelle2" mitkopiert werden soll. ( Vorname - Nachname - Adresse - Anzahl)
und
die "Tabelle2" sollte vor der Abarbeitung des Makro-Filters vollständig gelöscht werden um Daten aus vorigen Abfragen zu entfernen.
mfg Peter
Zitat:
der Code ist doch nicht kompliziert
der Code ist doch nicht kompliziert
Tja - aus deiner Sicht ist das sicher so aber ......
Ich hätte gerne noch eine dritte Daten-Spalte in "Tabelle1 " hinzugefügt, welche auf die "Tabelle2" mitkopiert werden soll. ( Vorname - Nachname - Adresse - Anzahl)
und
die "Tabelle2" sollte vor der Abarbeitung des Makro-Filters vollständig gelöscht werden um Daten aus vorigen Abfragen zu entfernen.
mfg Peter
Antwort 5 von Hajo_Zi
Hallo Peter,
solche Veränderungen sollte man kurzfristig rüber bringen. Die Datei muß immer wieder nachgbaut werden. Es besteht bei mir lkein Grund solche Beispiel aufzuheben und 95% meines Codes teste ich bevor er gepostet wird.
Option Explicit
Sub kopieren()
Dim LoI As Long
Dim LoJ As Long
Dim LoK As Long
Dim LoLetzte As Long
´ unabhängig von Excelversion für Spalte A (1)
´ letzte Zeile in Spalt A der Quelltabelle feststellen
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Worksheets("Tabelle5").Cells.ClearContents ´ Zieltabelle löschen
Range("A1:C1").Copy Worksheets("Tabelle5").Range("A1") ´ Tabellenkopf in Zieltabelle kopieren
LoJ = 2 ´ Anfangszeile in Zieltabelle für die Datensätze
For LoI = 2 To LoLetzte ´ Schleife fü die Namen
For LoK = 1 To Cells(LoI, 4) ´ Schleife für die Anzahl laut Spalte D (4)
´ Zelle der Quelltabelle Spalte A (1) bis C (3) in Zieltabelle kopieren
Range(Cells(LoI, 1), Cells(LoI, 3)).Copy Worksheets("Tabelle5").Cells(LoJ, 1)
LoJ = LoJ + 1 ´ Zeilenzähler für Zielttabelle um 1 erhöhen
Next LoK
Next LoI
End Sub
Gruß Hajo
solche Veränderungen sollte man kurzfristig rüber bringen. Die Datei muß immer wieder nachgbaut werden. Es besteht bei mir lkein Grund solche Beispiel aufzuheben und 95% meines Codes teste ich bevor er gepostet wird.
Option Explicit
Sub kopieren()
Dim LoI As Long
Dim LoJ As Long
Dim LoK As Long
Dim LoLetzte As Long
´ unabhängig von Excelversion für Spalte A (1)
´ letzte Zeile in Spalt A der Quelltabelle feststellen
LoLetzte = IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row, Rows.Count)
Worksheets("Tabelle5").Cells.ClearContents ´ Zieltabelle löschen
Range("A1:C1").Copy Worksheets("Tabelle5").Range("A1") ´ Tabellenkopf in Zieltabelle kopieren
LoJ = 2 ´ Anfangszeile in Zieltabelle für die Datensätze
For LoI = 2 To LoLetzte ´ Schleife fü die Namen
For LoK = 1 To Cells(LoI, 4) ´ Schleife für die Anzahl laut Spalte D (4)
´ Zelle der Quelltabelle Spalte A (1) bis C (3) in Zieltabelle kopieren
Range(Cells(LoI, 1), Cells(LoI, 3)).Copy Worksheets("Tabelle5").Cells(LoJ, 1)
LoJ = LoJ + 1 ´ Zeilenzähler für Zielttabelle um 1 erhöhen
Next LoK
Next LoI
End Sub
Gruß Hajo
Antwort 6 von urbi
Super, Ich konnte nun alle Anpassungen bezüglich Spaltenänderungen selber vornehmen und es funktioniert auch einwandfrei.
Jetzt bleibt nur noch eines...
und zwar "zusätzlich Zeilen" über den Überschriften (z.B. für eine Tabellenüberschrift)
Beim Einfügen einer zusätzlichen Zeile erscheint der Debugger mit folgender gelb hinterlegten Zeile:
Wie geb ich hier den Schleifen-Beginn für die "Zeile" vor?
mfg Peter
Jetzt bleibt nur noch eines...
und zwar "zusätzlich Zeilen" über den Überschriften (z.B. für eine Tabellenüberschrift)
Beim Einfügen einer zusätzlichen Zeile erscheint der Debugger mit folgender gelb hinterlegten Zeile:
Zitat:
For LoK = 1 To Cells(LoI, 3) ´Schleife für die Anzahl laut Spalte C
For LoK = 1 To Cells(LoI, 3) ´Schleife für die Anzahl laut Spalte C
Wie geb ich hier den Schleifen-Beginn für die "Zeile" vor?
mfg Peter
Antwort 7 von Hajo_Zi
Hallo Peter,
ich hatte es schon in meinem letzten Beitrag geschrieben, das Fragen kurzfristig erfolgen sollen.
Wenn Du Dir meinen Beitrag ansiehst habe ich immer den kompletten Code gepostest, was Du nicht für notwendig hälst. Ich lehne es aber ab über das Internet auf fremde Rechner vz7u schauen. Da mußt Du die Lösung schon selber finden.
Gruß Hajo
ich hatte es schon in meinem letzten Beitrag geschrieben, das Fragen kurzfristig erfolgen sollen.
Wenn Du Dir meinen Beitrag ansiehst habe ich immer den kompletten Code gepostest, was Du nicht für notwendig hälst. Ich lehne es aber ab über das Internet auf fremde Rechner vz7u schauen. Da mußt Du die Lösung schon selber finden.
Gruß Hajo

