Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Vervielfältigung anhand von Variable

Forumthread: VBA Vervielfältigung anhand von Variable

VBA Vervielfältigung anhand von Variable
07.12.2022 11:33:18
Variable
Hallo zusammen,
aktuell stehe ich vor einer Herausforderung, die ich nicht über Formeln abbilden kann und würde mich über eure Unterstützung bei dieser Herausforderung sehr freuen :)
Ich benötige ein Makro, welches Folgendes ausführen kann:
1. Tabellenblatt 2 ab Zeile 2 abwärts alles löschen
2. Inhalt von Tabellenblatt 1 ab Zeile 3, Zellen B bis G kopieren
3. Füge die kopierten Zellen in Tabellenblatt 2 ab Zeile 2 / "oder nächste leere Zeile" in Spalte B bis G ein. Außerdem soll folgendes parallel ausgeführt werden:
3a. In Spalte A soll eine fortlaufende Nummer eingefügt werden und der Zähler soll mit jeder neuen Zeile, die von Tabellenblatt 1 kopiert wird, neu gestartet werden
3b. Einfügung Individuelle Formeln in I, J, K und L
4. Schritt 3, 3a und 3b sollten so oft wiederholt werden, wie es die Variable in Spalte A in Tabellenblatt 1 ausweist (in der entsprechenden Zeile)
5. Diesen Vorgang wird mit allen Zeilen, die in Arbeitsblatt 1 mit Inhalt versehen wurden, wiederholt
Vielen Dank schon mal im Voraus für eure Unterstützung / Hilfe ;)
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Vervielfältigung anhand von Variable
07.12.2022 12:15:07
Variable
Hallo Robby,
versuche mal mit dem Makrorekorder (MR). Es nimmt alle deine Schritten auf. Danach muss man "bereinigen".
Fang mit kleinen Schritte an:
MR starten, nur dein Pkt 1 ausführen, MR stoppen, Code anschauen, versuchen zu verstehen,
dann MR Starten, nur dein Pkt 2 und 3, MR stoppen, anschauen.
usw.
Wir können dir eine Fisch geben, aber dich zu zeigen, wie man fischt, ist für Dich auf lange Sicht besser.
VG
Yal
Anzeige
AW: VBA Vervielfältigung anhand von Variable
07.12.2022 13:57:55
Variable
Vielen Dank für die schnelle Rückmeldung, Yal
Habe versucht, anhand deines sehr hilfreichen Hinweises, es nachzubauen. Habe auch erfolgreich Punkt 1, 2, 3 und 3b hinbekommen.
Hast du einen Tipp wie ich jetzt Variable, Wiederholungen und abhängige Zähler einbinden kann :)

 Sub Makro2()
' Makro2 Makro
Rows("2:500").Select
Selection.Delete Shift:=xlUp
Sheets("Tabelle1").Select
Range("B3:G3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Tabelle2").Select
Range("B2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("I2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-5]&""-""&RC[-4]"
Range("J2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-4]&""-""&RC[-3]"
Range("K2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-7]&""-""&""-""&RC[-6]&""-""&RC[-5]"
Range("L2").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=RC[-10]&""-""&RC[-9]"

Anzeige
AW: VBA Vervielfältigung anhand von Variable
07.12.2022 15:21:35
Variable
Hallo Robby,
Du musst nicht Zeile für Zeile kopieren. Du kannst es "en Block" behandeln. Folgendes ist nichts anderes als dein Code, nur bereinigt von alles, was der MR dazwischen aufnimmt. Nur die Quelle B3:G3 habe ich in B3:G500 geändert.

 Sub Makro2()
With Sheets("Tabelle2")
.Rows("2:500").ClearContents
Sheets("Tabelle1").Range("B3:G500").Copy .Range("B2")
With Range(.Range("I2"), Range("I99999").End(xlUp)) 'von I2 bis letzte befüllte Zelle in Spalte I (vorausgesetz, es sind weniger als 99.999)
.FormulaR1C1 = "=RC[-5]&""-""&RC[-4]"
.Offset(0, 1).FormulaR1C1 = "=RC[-4]&""-""&RC[-3]"
.Offset(0, 2).FormulaR1C1 = "=RC[-7]&""-""&""-""&RC[-6]&""-""&RC[-5]"
.Offset(0, 3).FormulaR1C1 = "=RC[-10]&""-""&RC[-9]"
End With
End With
End Sub
Für Schleife und so weiter kann ich nicht deinen persönlichen Lehrer werden (wäre viel zu teuer). Dafür gibt es unzählige Video-Tutorials.
VG
Yal
Anzeige
AW: VBA Vervielfältigung anhand von Variable
07.12.2022 18:03:25
Variable
Hallo Yal,
vielen Dank für die Hilfe :)
Habe etwas mal zusammengebaut, dass für meine Bedürfnisse jetzt passt. Falls du einen Tipp zur Optimierung hast, wäre ich dir dankbar.
Viele Grüße
Robby

Sub Makro2()
Sheets("Tabelle2").Select
Rows("2:500").Select
Selection.Delete Shift:=xlUp
Range("A2").Select
Dim Anzahl_Zeilen As Integer
Sheets("Tabelle1").Select
Range("A3").Select
Anzahl_Zeilen = ActiveCell.Value
For i = 1 To Anzahl_Zeilen
Dim lgLetzte As Long
With Sheets("Tabelle2")
lgLetzte = .Cells(Rows.Count, 2).End(xlUp).Row + 1
.Range("B" & lgLetzte & ":G" & lgLetzte) = Sheets("Tabelle1").Range("B3:G3").Value
Sheets("Tabelle1").Select
.Range("A" & lgLetzte & ":A" & lgLetzte) = "=COUNTIF(R1C[10]:RC[10],RC[10])"
.Range("I" & lgLetzte & ":I" & lgLetzte) = "=RC[-5]&""-""&RC[-4]"
.Range("J" & lgLetzte & ":J" & lgLetzte) = "=RC[-4]&""-""&RC[-3]"
.Range("K" & lgLetzte & ":K" & lgLetzte) = "=RC[-7]&""-""&RC[-8]&""-""&RC[-6]&""-""&RC[-5]"
.Range("L" & lgLetzte & ":L" & lgLetzte) = "=RC[-10]&""-""&""-""&RC[-9]&""-""&RC[-11]"
.Range("M" & lgLetzte & ":M" & lgLetzte) = "=RC[-11]&""-""&""-""&RC[-10]"
End With
Next i
Sheets("Tabelle1").Select
Range("A4").Select
Anzahl_Zeilen = ActiveCell.Value
For i = 1 To Anzahl_Zeilen
With Sheets("Tabelle2")
lgLetzte = .Cells(Rows.Count, 2).End(xlUp).Row + 1
.Range("B" & lgLetzte & ":G" & lgLetzte) = Sheets("Tabelle1").Range("B4:G4").Value
Sheets("Tabelle1").Select
.Range("A" & lgLetzte & ":A" & lgLetzte) = "=COUNTIF(R1C[10]:RC[10],RC[10])"
.Range("I" & lgLetzte & ":I" & lgLetzte) = "=RC[-5]&""-""&RC[-4]"
.Range("J" & lgLetzte & ":J" & lgLetzte) = "=RC[-4]&""-""&RC[-3]"
.Range("K" & lgLetzte & ":K" & lgLetzte) = "=RC[-7]&""-""&RC[-8]&""-""&RC[-6]&""-""&RC[-5]"
.Range("L" & lgLetzte & ":L" & lgLetzte) = "=RC[-10]&""-""&""-""&RC[-9]&""-""&RC[-11]"
.Range("M" & lgLetzte & ":M" & lgLetzte) = "=RC[-11]&""-""&""-""&RC[-10]"
End With
Next i
'usw.
'Ich wiederholte dies, bis der max. Bereich abgefragt wird. viele viele mal, bis die VBA Meldung kamm  "Prozedur zu groß" ;)
End Sub

Anzeige
AW: VBA Vervielfältigung anhand von Variable
07.12.2022 19:45:08
Variable
Hallo Robby,
es ist mir nicht nachvollziehbar, was damit gemacht werden soll.
Vermeide unbedingt den "Spaghetti-Code": kopieren, einfügen, anpassen.
Versuch den Muster zu erkennen und die Parameter, die sich dabei ändern zu isolieren. ZUm Beispiel die Formel in Spalte A und I bis M sind immer dieselbe. Sie sind nicht von dem gelesene Zeile 3, 4, 5, usw. abhängig. Also reicht es einaml am Ende die letzte Zeile zu ermitteln und auf einmal diese Formel einzufügen.
Folgende Code sollte genau das gleich machen wie "'Ich wiederholte dies, bis der max. Bereich abgefragt wird."

Sub Makro2()
Dim Anzahl_Zeilen As Integer
Dim ZeileNr As Long
Dim i 'Lauf-Variable
With Sheets("Tabelle2")
.Rows("2:500").Delete Shift:=xlUp
For i = 3 To 500 'oder was auch immer
Anzahl_Zeilen = Sheets("Tabelle1").Cells(i, "A").Value
Sheets("Tabelle1").Cells(i, "B").Resize(1, 6).Copy
ZeileNr = .Cells(Rows.Count, 2).End(xlUp).Row
.Cells(ZeileNr, "B").Resize(Anzahl_Zeilen, 1).PasteSpecial xlPasteValues
Next
ZeileNr = .Cells(Rows.Count, 2).End(xlUp).Row
.Range("A2:A" & ZeileNr).FormulaR1C1 = "=COUNTIF(R1C[10]:RC[10],RC[10])"
.Range("I2:I" & ZeileNr).FormulaR1C1 = "=RC[-5]&""-""&RC[-4]"
.Range("J2:J" & ZeileNr).FormulaR1C1 = "=RC[-4]&""-""&RC[-3]"
.Range("K2:K" & ZeileNr).FormulaR1C1 = "=RC[-7]&""-""&RC[-8]&""-""&RC[-6]&""-""&RC[-5]"
.Range("L2:L" & ZeileNr).FormulaR1C1 = "=RC[-10]&""-""&""-""&RC[-9]&""-""&RC[-11]"
.Range("M2:M" & ZeileNr).FormulaR1C1 = "=RC[-11]&""-""&""-""&RC[-10]"
End With
'damit sind 498 (500 - 3 + 1) Wiederholungen vollständig.
End Sub
Achte auf das richtige Einrücken des Codings. Schon durch die bessere Lesbarkeit vermeidest Du viele Fehler.
VG
Yal
Anzeige
AW: VBA Vervielfältigung anhand von Variable
07.12.2022 20:34:22
Variable
Danke für die Hinweise, Tipps und Beispiel :)
Viele Grüße
Robby
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige