Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Makro für Zeile einfügen

Makro für Zeile einfügen
01.10.2008 17:01:06
Hermann
Hallo,
ich habe ein Spalte mit folg unregelmäßigen Aufbau:
A
A
B
C
C
C
D
D
E
E
...
Nun soll immer dann, wenn eine Veränderung (z. B von A nach B) eintritt, eine zusätzliche Zeile (im Bsp. Zeile mit A) kopiert und eingefügt werden.
Ich habe versucht folgende 2 Makro mit einander zu verbinden, aber es funktioniert nicht. Das 1 MAkro springt zwar in das 2 Makro, aber kopiert wird nichts.
Vielleicht könnt Ihr helfen bzw evtl ist mein Ansatz auch falsch.
Gruß Hermann

Sub Makro1()
ActiveCell.FormulaR1C1 = "=IF(RC[-1]=R[-1]C[-1],"""",

Sub Makro2())"
ActiveCell.Offset(1, 0).Range("A1").Select
End Sub



Sub Makro2()
ActiveCell.Offset(-1, -2).Range("A1:N1").Select
Selection.Copy
Selection.Insert Shift:=xlDown
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 3
ActiveCell.Offset(0, 11).Range("A1").Select
Application.CutCopyMode = False
Selection.AutoFill Destination:=ActiveCell.Range("A1:A2"), Type:= _
xlFillDefault
ActiveCell.Range("A1:A2").Select
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
ActiveCell.Offset(3, -9).Range("A1").Select
End Sub


8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Zeilen einfügen
01.10.2008 18:02:45
Backowe
Hallo Hermann,
probiere es mal so:
VBA-Code:
Sub ZeilenEinfuegen()
Dim i As Long
For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
  If Cells(i, "A") <> Cells(i + 1, "A") Then
    Cells(i, "A").EntireRow.Insert
    Cells(i, "A") = Cells(i + 1, "A")
  End If
Next
End Sub
Gruß Jürgen
AW: Zeilen einfügen
Hermann

Hallo Jürgen,
funktioniert schon ganz gut.
Es wird aber nicht die ganze Zeile kopiert und eingefügt, sondern nur eine Zelle eingefügt.
Gruß
Hermann
Etwas Schwund ist überall! :)
Backowe

Hi Hermann,
ist mir irgendwie durch die Lappen gegangen! ;o)
VBA-Code:
Sub ZeilenEinfuegen()
Dim i As Long
For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
  If i < Cells(Rows.Count, "A").End(xlUp).Row And _
    Cells(i, "A") <> Cells(i + 1, "A") Then
      Cells(i + 1, "A").EntireRow.Insert
      Rows(i + 2).Copy Destination:=Rows(i + 1)
  End If
Next
End Sub
Gruß Jürgen
Eine bessere Alternative wäre ...
Backowe

Hallo Hermann,
... folgender Code:
VBA-Code:
Sub ZeilenVonObenNachUntenEinfuegen()
Dim i As Long, y As Long
y = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
  If Cells(i + y, "A") <> Cells(i, "A") Then
    Rows(i + y).EntireRow.Insert
    Rows(i + y - 1).Copy Destination:=Rows(i + y)
    y = y + 1
  End If
Next
End Sub
Gruß Jürgen
AW: Eine bessere Alternative wäre ...
Hermann

Hi Jürgen,
schon besser, aber es wird bei jedem Wechsel kopiert. Vielleicht habe ich mich zu Beginn shlecht ausgedrückt.
Es sollen nur immer die letzte Zeile kopiert werden, wenn ein Wechsel stattfindet.
Also wie folgt:
A
A - kopieren
B
B
B -kopieren
C - kopieren
D
D - kopieren
E
..
Gruß Hermann
Mit Kanonen auf Spatzen! ;o)
Backowe

Hi Hermann,
VBA-Code:
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
Variablendeklaration vergessen! :(
Backowe

Hi Hermann,
VBA-Code:
Option Explicit
Option Base 1
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
AW: Spatz ist erledigt :o)
Hermann

Hi Jürgen,
vielen Dank für Deine Hilfe!!
Gruß
Hermann
Anzeige
AW: Zeilen einfügen
02.10.2008 17:16:17
Hermann
Hallo Jürgen,
funktioniert schon ganz gut.
Es wird aber nicht die ganze Zeile kopiert und eingefügt, sondern nur eine Zelle eingefügt.
Gruß
Hermann
Etwas Schwund ist überall! :)
02.10.2008 18:08:24
Backowe
Hi Hermann,
ist mir irgendwie durch die Lappen gegangen! ;o)
VBA-Code:
Sub ZeilenEinfuegen()
Dim i As Long
For i = Cells(Rows.Count, "A").End(xlUp).Row To 1 Step -1
  If i < Cells(Rows.Count, "A").End(xlUp).Row And _
    Cells(i, "A") <> Cells(i + 1, "A") Then
      Cells(i + 1, "A").EntireRow.Insert
      Rows(i + 2).Copy Destination:=Rows(i + 1)
  End If
Next
End Sub
Gruß Jürgen
Eine bessere Alternative wäre ...
Backowe

Hallo Hermann,
... folgender Code:
VBA-Code:
Sub ZeilenVonObenNachUntenEinfuegen()
Dim i As Long, y As Long
y = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
  If Cells(i + y, "A") <> Cells(i, "A") Then
    Rows(i + y).EntireRow.Insert
    Rows(i + y - 1).Copy Destination:=Rows(i + y)
    y = y + 1
  End If
Next
End Sub
Gruß Jürgen
AW: Eine bessere Alternative wäre ...
Hermann

Hi Jürgen,
schon besser, aber es wird bei jedem Wechsel kopiert. Vielleicht habe ich mich zu Beginn shlecht ausgedrückt.
Es sollen nur immer die letzte Zeile kopiert werden, wenn ein Wechsel stattfindet.
Also wie folgt:
A
A - kopieren
B
B
B -kopieren
C - kopieren
D
D - kopieren
E
..
Gruß Hermann
Mit Kanonen auf Spatzen! ;o)
Backowe

Hi Hermann,
VBA-Code:
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
Variablendeklaration vergessen! :(
Backowe

Hi Hermann,
VBA-Code:
Option Explicit
Option Base 1
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
AW: Spatz ist erledigt :o)
Hermann

Hi Jürgen,
vielen Dank für Deine Hilfe!!
Gruß
Hermann
Anzeige
Eine bessere Alternative wäre ...
03.10.2008 13:10:00
Backowe
Hallo Hermann,
... folgender Code:
VBA-Code:
Sub ZeilenVonObenNachUntenEinfuegen()
Dim i As Long, y As Long
y = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row
  If Cells(i + y, "A") <> Cells(i, "A") Then
    Rows(i + y).EntireRow.Insert
    Rows(i + y - 1).Copy Destination:=Rows(i + y)
    y = y + 1
  End If
Next
End Sub
Gruß Jürgen
AW: Eine bessere Alternative wäre ...
Hermann

Hi Jürgen,
schon besser, aber es wird bei jedem Wechsel kopiert. Vielleicht habe ich mich zu Beginn shlecht ausgedrückt.
Es sollen nur immer die letzte Zeile kopiert werden, wenn ein Wechsel stattfindet.
Also wie folgt:
A
A - kopieren
B
B
B -kopieren
C - kopieren
D
D - kopieren
E
..
Gruß Hermann
Mit Kanonen auf Spatzen! ;o)
Backowe

Hi Hermann,
VBA-Code:
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
Variablendeklaration vergessen! :(
Backowe

Hi Hermann,
VBA-Code:
Option Explicit
Option Base 1
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
AW: Spatz ist erledigt :o)
Hermann

Hi Jürgen,
vielen Dank für Deine Hilfe!!
Gruß
Hermann
Anzeige
AW: Eine bessere Alternative wäre ...
03.10.2008 14:37:20
Hermann
Hi Jürgen,
schon besser, aber es wird bei jedem Wechsel kopiert. Vielleicht habe ich mich zu Beginn shlecht ausgedrückt.
Es sollen nur immer die letzte Zeile kopiert werden, wenn ein Wechsel stattfindet.
Also wie folgt:
A
A - kopieren
B
B
B -kopieren
C - kopieren
D
D - kopieren
E
..
Gruß Hermann
Mit Kanonen auf Spatzen! ;o)
03.10.2008 16:16:00
Backowe
Hi Hermann,
VBA-Code:
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
Variablendeklaration vergessen! :(
Backowe

Hi Hermann,
VBA-Code:
Option Explicit
Option Base 1
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
AW: Spatz ist erledigt :o)
Hermann

Hi Jürgen,
vielen Dank für Deine Hilfe!!
Gruß
Hermann
Anzeige
Variablendeklaration vergessen! :(
03.10.2008 16:50:32
Backowe
Hi Hermann,
VBA-Code:
Option Explicit
Option Base 1
Sub ZeilenVonObenNachUntenEinfuegenMitArray()
Dim i As Long, y As Long
Dim ZZaehler() As Integer
Dim intCounter As Integer
y = 1
intCounter = 1
For i = 1 To Cells(Rows.Count, "A").End(xlUp).Row - 1
  ReDim Preserve ZZaehler(intCounter)
  If Cells(i + 1, "A") <> Cells(i, "A") Then
    ZZaehler(intCounter) = i + y
    intCounter = intCounter + 1
    y = y + 1
  End If
Next
For intCounter = 1 To UBound(ZZaehler)
  Rows(ZZaehler(intCounter)).EntireRow.Insert
  Rows(ZZaehler(intCounter) - 1).Copy Destination:=Rows(ZZaehler(intCounter))
Next intCounter
End Sub
Gruß Jürgen
AW: Spatz ist erledigt :o)
Hermann

Hi Jürgen,
vielen Dank für Deine Hilfe!!
Gruß
Hermann
Anzeige
AW: Spatz ist erledigt :o)
03.10.2008 18:16:00
Hermann
Hi Jürgen,
vielen Dank für Deine Hilfe!!
Gruß
Hermann

301 Forumthreads zu ähnlichen Themen


Hallo Hans,
wenn ich die URLs richtig interpretiere, haben wir im Forum soeben die Zahl von 1 Million Beiträgen überschritten.
Herzlichen Glückwunsch zu dem Erfolg Deines "Babys"!
Gruß
Martin

Hallo Leute,
heute habe ich wieder mal ein einfaches Problem für Euch, an dem ich aber nicht weiter kommen:
Ich möchte die Arbeitsblätter in meiner Arbeitsmappe zählen. Das ist ja kein Problem (ThisWorkbook.sheets.count).
wenn das makro mehr als ein Arbeitsblatt zählt (also das Erge...

Hallo zusammen!
Ich habe da als blutiger Anfänger in VBA zwei Fragen:
1.) Wie kann ich in meiner Tabelle in jeder zweiten Spalte 4 leere Spalten einfügen lassen?
2.) Dann möchte ich unter den Inhalt der ersten fünf Spalten (A-E) den Inhalt der zweiten 5 Spalten (F-J) usw. In der grö...

Guten Morgen!
Ich hätte folgendes Problem: Ich erhalte automatisiert Exceltabellen, bei denen nicht alle Zellen einer Zeile gefüllt werden, wenn dort der Inhalt einer darüberliegenden Zeile stehen sollte. Zur Weiterverarbeitung muss ich aber diese Zellen mit den dazugehörigen Werten füllen....

Hallo,
google spuckt Zu "Excel" und "Häufigkeitslücken" lediglich 3 Treffer aus, die nicht gerade brauchbar für meine Aufgabe sind.
Ich muss für 3 Variablen eine Typisierung mit einer Häufigkeitslücke durchführen.
Hiermit bin ich fast gänzlich überfragt. Mit Quantilen hatte ich das...

Hallo zusammen,
ich habe eine lange Liste, in der in einer Spalte Daten stehen, wo ab und zu vorangehende Nullen nötig sind (mal eine - mal 2...etc.) - und manchmal auch keine.
Wie kann ich diese Zellen formatieren, das die vorangehenden "Nullen" nicht automatisch weggelassen werden?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige