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

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige