Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1860to1864
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

Makro zum Zeile duplizieren

Makro zum Zeile duplizieren
14.12.2021 22:15:21
Emanuel
Hallo zusammen,
ich möchte in meine Liste ein Makro integrieren (am liebsten per Button), mit dessen Hilfe ich die grauen Zeilen (z.B. Zeile 2) samt deren Formatierung in die nächste Zeile duplizieren kann. Klicke ich den Button (spiele das Makro) noch mal, soll eine weitere Zeile hineindupliziert werden.
Die Gruppierung am linken Rand soll sich um jede hinzugefügte Zeile erweitern.
Ist das möglich?
Vielen Dank und liebe Grüße
Emanuel

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro zum Zeile duplizieren
15.12.2021 10:23:29
UweD
Hallo
versuch es mal so

Sub Grau()
Dim LR As Long, i As Long
With ActiveSheet
LR = .Cells(.Rows.Count, "A").End(xlUp).Row 'letzte Zeile der Spalte A
For i = LR To 2 Step -1
If .Cells(i, 1).Interior.Color = 15921906 Then
.Rows(i + 1).Insert
.Rows(i).Copy .Rows(i + 1)
End If
Next
End With
End Sub
Das Makro in ein Standardmodul. Das kannst du dann einem Button zuweisen.
LG UweD
AW: Makro zum Zeile duplizieren
15.12.2021 10:32:10
Yal
Hallo Emanuel,
natürlich ist es möglich, und gar nicht mal kompliziert. Es macht bei ein so einfache Vorhaben, wenig Sinn, von jemand anderen abhängig zu werden.
Daher anbei der Vorgehensweise, wie Du das selber auf die Bein stellen, prüfen und nachkorrigieren kann.
Erste Schritt ist der Zusatz-Mnü "Entwicklertools" sichtbar zu machen: nach Rechtsklick auf dem Menü "Menüband anpassen..." setzst Du in der rechte Spalte der Hauptregisterkarten einen Haken bei "Entwicklertools" an. Mit ok Schliessen.
Jetzt hast Du den Menü "Entwicklertools" zur Verfügung. Darin ist links die Funktion "Makro aufzeichnen", was auch als Makro-Rekorder bekannt.
_ Aufnahme einschalten, vorgeschlagene Einstellungen ("Makro1", "Diese Arbeitsmappe") einfach so nehmen. Der Schrift von "Makro aufzeichen" ändert sich in "Aufzeichnung beenden"
_ Zeile 2 markieren
_ kopieren
_ Zeile 3 markieren
_ Zeile einfürgen
_ Makro-Aufzeichnung beenden
Dann in "Entwicklertools", "Visual Basic" anklicken (alternativ Alt+F11)
Du bist dann in Visual Basic Editor.
Links deiner Projektstruktur (sieht wie eine Verzeichnisstruktur), den "Projekt Explorer" (wenn nicht sichtbar: Menü "Ansicht", "Projekt Explorer")
Jede "Objekt" hat sein eigenen "Codepane": "DieseArbeitsmappe" für die ganze Datei und jedes Blatt unter "Tabelle1", "Tabelle2", ..., aber auch den globalen Code unter Modul. Öffne "Module" und Doppleklicke auf "Modul1". Da ist der Code, den der Makro-Rekorder aufgenommen hat.
Es lässt sich leicht lesen, auch wenn der Vokabular zuerst neu ist:

Sub Makro2()
' Makro2 Makro
Rows("2:2").Select
Selection.Copy
Rows("3:3").Select
Selection.Insert Shift:=xlDown
End Sub
auf Deutsch:
_ die Zeile(n) (Row) 2 bis 2 wurde(n) selektiert
_ die Selektion kopiert
_ die Zeile 3 bis 3 selektiert
_ es wurde "inseriert", in dem das Vorhandenen nach unten verschoben worden ist.
Jetzt ist die Frage:
wie kann man aus diesem Code etwas flexibleres machen, spricht nicht immer die Zeile 2 sondern die Zeile, wo man sich befindet?
Hier ist es komplizierter, weil man wissen muss, welche Vokabular eingesetzt werden soll: EntireRow, Offset, ... (diese Vokabular lernst Du immer mehr bei jeder Makro-Aufzeichnung)

Sub ZeileUnten_kopieren()
Selection.Range("A1").EntireRow.Copy
Selection.Offset(1, 0).Select
Selection.Insert Shift:=xlDown
End Sub
Auf Deutsch:
_ aus der Selektion die erste obere linke Zelle (relativ gesehen die "A1" von der Selektion"), davon die ganze Zeile (EntireRow) kopieren,
_ aus der Selektion eine "Bewegung" von eine Zeile nach unten und null Spalten nach Rechts gehen und diese selektieren
_ auf die neue Selektion das Kopierten inserieren.
Verstehst Du etwa einen Wort nicht, so lege dein Cursor auf das Wort und drücke Strg+F1. Du gelangst in der Online-Hilfe. Darin sind auch viele einfache Beispiele, die
Note: da Original und Kopie sich nicht unterscheiden, hätten man auch auf Zeile 2 kopieren, anstatt Zeile 3. Aber es gibt die Möglichkeit, mehr zu erklären ;-)
Das waren deien erste Schritten. Ich hoffe, Du bist daraus mehr neugierig als angeschreckt. Möge noch viele Schritte dazu kommen.
VG
Yal
(Nachtrag: Du kannst unter "Daten", auf der Pfeil unten recht im Funktionsblock "Gleiderung", bewirken, dass bei Grupppierung von Zeilen die "Hauptzeile" über die Detaildaten vorkommt anstatt unten. Einfach probieren)
Anzeige
AW: Makro zum Zeile duplizieren
15.12.2021 18:16:23
Emanuel
Vielen, lieben Dank euch beiden.
@Yal: Ich finde es ganz toll, dass du mir das so im Detail erklärt hast. Ich komme auch soweit gut mit. :)
Jetzt ist es aber so, dass ich einen Butto integrieren möchte (bzw. habe ich das schon geschafft :D), der am Ende der Zeile 1, 5 und 8 usw. (die grünen Zeilen) sitzt und der nach Klick die graue Zeile darunter kopiert und einfügt. Das ist mit deiner Formel auch möglich. Allerdings verschiebt es ja die anderen Zeilen nach unten, so dass sich die Makros in den Buttons von Zeile 5, 8 usw. an ihre neue Zeilennummer anpassen müssten.
Das bekomme ich noch nicht hin.
Ist das überhaupt verständlich?
Anzeige
AW: Makro zum Zeile duplizieren
15.12.2021 18:51:40
Yal
Hallo Emanuel,
ich habe meinen Beitrag gepostet und dann entdeckt, dass Uwe seine Antwort gepostet hatte. Erst mit seiner Version habe ich verstanden, was Du eigentlich wolltest.
Er fügt alle Zeilen auf einmal (For-Schleife). Dann ist nur ein einziger Button notwendig.
Ein wichtige Punkt in seinem Code: beim Einfügen von Zeile, immer von unten hoch: For i = LR To 2 Step -1.
Eselsbrücke: wie beim Bodenwischen, immer zu Tür zurück.
Er arbeitet nicht mit festem Zeillennummer, sondern prüft die Eigenschaft der Zeile. In dem Fall die Farbe in Spalte A der betrachtete Zeile.
Ist diese Grau, wird eine Zeile darunter inseriert und die aktuelle Zeile darin kopiert.
Kommst Du soweit noch gut mit?
VG
Yal
Anzeige
AW: Makro zum Zeile duplizieren
15.12.2021 20:45:08
Emanuel
Hi Yal,
ich glaube, mein Anliegen ist noch nicht richtig verständlich geworden, sorry. Ich habe noch mal eine Datei hochgeladen, in der ich die Buttons und was sie tun sollen skizziert haben. https://www.herber.de/bbs/user/149830.xlsx
Vielleicht hilft das?
Liebe Grüße
Emanuel
AW: Makro zum Zeile duplizieren
16.12.2021 08:49:53
UweD
Hallo nochmal
Hier eine Lösung (ohne Buttons)
Der Auslöser ist ein click in eine Zelle in Spalte J.
Da kannst du ja entsprechenden Infotext reinschreiben
Einmal wie folgt vorgehen
- Rechtsclick auf den Tabellenblattreiter
- Code anzeigen
- Code rechts reinkopieren

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim SP As Integer, Z As Long
SP = 10 ' Nur bei click in Spalte J
If Not Intersect(Target, Columns(SP)) Is Nothing Then
If Target.Count = 1 Then ' nur wenn eine Zelle gewählt wurde
Z = Target.Row
' Nur wenn Grau
If Cells(Z, 1).Interior.Color = 15921906 Then
Rows(Z + 1).Insert
Rows(Z).Copy Rows(Z + 1)
End If
End If
End If
End Sub
Clickst du nun in Spalte J, und ist gleichzeitig die Farbe in A =grau, geschieht das Einfügen und Kopieren dieser Zeile.
OK?
LG UweD
Anzeige
AW: Makro zum Zeile duplizieren
16.12.2021 09:00:46
Piet
Hallo
es ist nicht sinnvoll in ein Blatt dutzende Button einzufügen, die jedesmal eine neue Zeile zugewiesen bekommen müssen, um neue Zeilen einzufügen.
Man nimmt nur einen Button den man ganz oben in die Überschrtiftszeile setzt, und der das ganze für ALLE Zeilen elegant erledigt.
Interessanterweise hat dir der Kollege Yal dazu schon einen guten Vorschlag gemacht. Ich habe ihn etwas verbessert, achte auf die Innenfarbe.
Setze den Cursor bitte in die Zeile die kopiert werden soll. Den Rest erledigt das Makro. So oft du drückst fügt es eine neue Zeile an der Stelle ein.
mfg Piet

Sub Makro1()
If ActiveCell.Interior.ColorIndex = 2 Then
Rows(ActiveCell.Row).Copy
Rows(ActiveCell.Row + 1).Insert Shift:=xlDown
Application.CutCopyMode = False
End If
End Sub

Anzeige
AW: Makro zum Zeile duplizieren
20.12.2021 20:40:18
Emanuel
Vielen Dank erstmal für eure Lösungen!
Leider funktioniert das für mich so nicht. Die Hintergrundfarbe der Zeilen habe ich nur exemplarisch gewählt. Normalerweise ist da keine.
Zudem bräuchte ich tatsächlich für jeden Block einen Button. Ist das denn wirklich so schlecht? Was spricht dagegen?
Wie wäre denn ein Code für Zeile unter Button kopieren und darunter einfügen?
Vielen Dank im Voraus und liebe Grüße
Emanuel

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige