Hallo...
Ich möchte, dass, wenn ich eine Zeile einfüge, automatisch die Formel von der Zelle unmittelbar darüber übernommen wird. Allerdings nur in Spalte A und C.
Wenn mir da jemand helfen könnte - besten Dank.
MfG
Karsten
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Listeneingabe
'bei Eingabe in neuer Zeile werden Formeln kopiert
Dim objZelle As Range, arrFormelSpalten
Dim lngSpalte As Long, intJ As Integer, bolFormel, lngOffset As Long
Const lngSpalte1 As Long = 1 'Erste Spalte der Liste
Const lngSpalteL As Long = 7 'Letzte Spalte der Liste
Const lngZeile1 As Long = 2 '1. Zeile mit Formel
arrFormelSpalten = Array(1, 3) 'Spalten mit Formeln
With Me
For Each objZelle In Target
'Prüfen ob geänderte Zelle(n) unterhalb der letzten Zeile mit Formel
If objZelle.Row > .Cells(.Rows.Count, arrFormelSpalten(0)).End(xlUp).Row _
And objZelle.Row > lngZeile1 _
And objZelle.Column = lngSpalte1 Then
Application.EnableEvents = False
'Formel in Spalten nach unten kopieren
For lngSpalte = LBound(arrFormelSpalten) To UBound(arrFormelSpalten)
.Range(.Cells(.Rows.Count, arrFormelSpalten(lngSpalte)).End(xlUp), _
.Cells(objZelle.Row, arrFormelSpalten(lngSpalte))).FillDown
Next
Application.EnableEvents = True
End If
Next objZelle
'Bei Eingaben in letzter Zeile nach rechts nächste Eingabezelle selektieren
If Target.Row = .Cells(.Rows.Count, arrFormelSpalten(0)).End(xlUp).Row _
And Target.Column >= lngSpalte1 _
And Target.Column lngSpalteL Then
lngSpalte = lngSpalte1 'ab 1. Spalte prüfen
lngOffset = 1 'Nächste Zeile selektieren wenn Eingabe in Letzter Spalte
End If
'Prüfen, ob Spalte Formel enhält
bolFormel = False
For intJ = LBound(arrFormelSpalten) To UBound(arrFormelSpalten)
If lngSpalte = arrFormelSpalten(intJ) Then bolFormel = True: Exit For
Next
If bolFormel = False Then
'Zelle selektieren
.Cells(Target.Row + lngOffset, lngSpalte).Select
Exit Do
End If
lngSpalte = lngSpalte + 1
Loop
End If
End With
End Sub
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Listeneingabe bei Eingabe in neuer Zeile werden Formeln kopiert
Dim objZelle As Range, arrFormelSpalten
Dim lngSpalte As Long, intJ As Integer, bolFormel, lngOffset As Long
Const lngSpalte1 As Long = 1 'Erste Spalte der Liste
Const lngSpalteL As Long = 7 'Letzte Spalte der Liste
Const lngZeile1 As Long = 2 '1. Zeile mit Formel
arrFormelSpalten = Array(1, 3) 'Spalten mit Formeln
With Me
For Each objZelle In Target
'Prüfen ob geänderte Zeile(n) Formel enthält
If Not .Cells(objZelle.Row, arrFormelSpalten(0)).HasFormula _
And objZelle.Row >= lngZeile1 _
And objZelle.Column = lngSpalte1 Then
bolFormel = True
Application.EnableEvents = False
'Formel in Spalten kopieren
For lngSpalte = LBound(arrFormelSpalten) To UBound(arrFormelSpalten)
Select Case objZelle.Row
Case lngZeile1
'Zeile direkt unter Spaltentitel eingefügt
.Range(.Cells(objZelle.Row, arrFormelSpalten(lngSpalte)), _
.Cells(objZelle.Row, arrFormelSpalten(lngSpalte)).End(xlDown)).FillUp
Case Is = lngSpalte1 _
And Target.Column lngSpalteL Then
lngSpalte = lngSpalte1 'ab 1. Spalte prüfen
lngOffset = 1 'Nächste Zeile selektieren wenn Eingabe in Letzter Spalte
End If
'Prüfen, ob Spalte Formel enhält
bolFormel = False
For intJ = LBound(arrFormelSpalten) To UBound(arrFormelSpalten)
If lngSpalte = arrFormelSpalten(intJ) Then bolFormel = True: Exit For
Next
If bolFormel = False Then
'Zelle selektieren
.Cells(Target.Row + lngOffset, lngSpalte).Select
Exit Do
End If
lngSpalte = lngSpalte + 1
Loop
End If
End With
End Sub
'#### Sparversion #####
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Sparversion, Formeln werden ggf. bei Werteingabe in Spalte B eingefügt
'Listeneingabe bei Eingabe in neuer Zeile werden Formeln kopiert
Dim objZelle As Range, arrFormelSpalten
Dim lngSpalte As Long
Const lngZeile1 As Long = 2 '1. Zeile mit Formel
Const lngSpalteE As Long = 2 'Spalte bei deren Eingabe ggf. Formel kopiert wird
arrFormelSpalten = Array(1, 3) 'Spalten mit Formeln
With Me
For Each objZelle In Target
'Prüfen ob geänderte Zeile(n) Formel enthält
If Not .Cells(objZelle.Row, arrFormelSpalten(0)).HasFormula _
And objZelle.Row >= lngZeile1 _
And objZelle.Column = lngSpalteE Then
Application.EnableEvents = False
'Formel in Spalten kopieren
For lngSpalte = LBound(arrFormelSpalten) To UBound(arrFormelSpalten)
Select Case objZelle.Row
Case lngZeile1
'Zeile direkt unter Spaltentitel eingefügt
.Range(.Cells(objZelle.Row, arrFormelSpalten(lngSpalte)), _
.Cells(objZelle.Row, arrFormelSpalten(lngSpalte)).End(xlDown)).FillUp
Case Is
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Listeneingabe bei Eingabe in neuer Zeile werden Formeln kopiert
Dim objZelle As Range, arrFormelSpalten
Dim lngSpalte As Long, intJ As Integer, bolFormel, lngOffset As Long
Const lngSpalte1 As Long = 1 'Erste Spalte der Liste
Const lngSpalteL As Long = 7 'Letzte Spalte der Liste
Dim lngZeile1 As Long '1. Zeile des Formelbereiches
Dim lngZeileL As Long 'letzte Zeile des Formelbereiches
arrFormelSpalten = Array(1, 3) 'Spalten mit Formeln
With Me
lngZeile1 = .Range("erste_Zelle").Row
lngZeileL = .Range("letzte_Zelle").Row
For Each objZelle In Target
'Prüfen ob geänderte Zeile(n) Formel enthält
If Not .Cells(objZelle.Row, arrFormelSpalten(0)).HasFormula _
And objZelle.Row >= lngZeile1 _
And objZelle.Row = lngSpalte1 Then
bolFormel = True
Application.EnableEvents = False
'Formel in Spalten kopieren
For lngSpalte = LBound(arrFormelSpalten) To UBound(arrFormelSpalten)
Select Case objZelle.Row
Case lngZeile1
'Zeile direkt unter Spaltentitel eingefügt
.Range(.Cells(objZelle.Row, arrFormelSpalten(lngSpalte)), _
.Cells(objZelle.Row, arrFormelSpalten(lngSpalte)).End(xlDown)).FillUp
Case Is lngSpalteL Then
lngSpalte = lngSpalte1 'ab 1. Spalte prüfen
lngOffset = 1 'Nächste Zeile selektieren wenn Eingabe in Letzter Spalte
End If
'Prüfen, ob Spalte Formel enhält
bolFormel = False
For intJ = LBound(arrFormelSpalten) To UBound(arrFormelSpalten)
If lngSpalte = arrFormelSpalten(intJ) Then bolFormel = True: Exit For
Next
If bolFormel = False Then
'Zelle selektieren
.Cells(Target.Row + lngOffset, lngSpalte).Select
Exit Do
End If
lngSpalte = lngSpalte + 1
Loop
End If
End With
End Sub
Daten als Liste festlegen:
Daten > Liste > Liste erstellen gehst. Bei Excel 2002 ist diese Funktion nicht verfügbar.Zeile einfügen:
Zeile einfügen.Formeln übernehmen:
VBA-Makro verwenden:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
'Listeneingabe bei Eingabe in neuer Zeile werden Formeln kopiert
Dim objZelle As Range, arrFormelSpalten
Dim lngSpalte As Long, lngOffset As Long
Const lngSpalte1 As Long = 1 'Erste Spalte der Liste
arrFormelSpalten = Array(1, 3) 'Spalten mit Formeln
With Me
For Each objZelle In Target
If objZelle.Row > 2 And objZelle.Column = lngSpalte1 Then
Application.EnableEvents = False
For lngSpalte = LBound(arrFormelSpalten) To UBound(arrFormelSpalten)
.Cells(objZelle.Row, arrFormelSpalten(lngSpalte)).Formula = .Cells(objZelle.Row - 1, arrFormelSpalten(lngSpalte)).Formula
Next
Application.EnableEvents = True
End If
Next objZelle
End With
End Sub
Problem: Die Formel wird nicht automatisch übernommen.
Lösung: Stelle sicher, dass du die Zeile unterhalb der letzten Zeile mit einer Formel einfügst und dass die Liste korrekt definiert ist.
Problem: Das Makro funktioniert nicht wie gewünscht.
Lösung: Überprüfe, ob das Makro korrekt im VBA-Editor eingefügt wurde und dass alle Zellreferenzen stimmen. Achte darauf, dass Application.EnableEvents = True am Ende des Makros steht, um die Ereignisse wieder zu aktivieren.
=OBEN() oder =WENNFEHLER() in den neuen Zellen, um auf die Werte in den Zellen darüber zuzugreifen.Beispiel 1: Wenn du eine neue Zeile zwischen A10 und A20 einfügst, stelle sicher, dass die Formeln in A10 und A20 korrekt sind, damit Excel die Formeln automatisch in der neuen Zeile einfügt.
Beispiel 2: Verwende das oben gezeigte Makro, um Formeln in den Spalten A und C zu übernehmen, unabhängig davon, wo du die neue Zeile einfügst.
1. Kann ich die Formel nur für bestimmte Spalten übernehmen?
Ja, du kannst im VBA-Makro nur die gewünschten Spalten angeben, indem du das arrFormelSpalten-Array anpasst.
2. Funktioniert das auch in Excel 2016?
Ja, die beschriebenen Methoden und die VBA-Lösungen funktionieren auch in Excel 2016 und neueren Versionen. Stelle sicher, dass du die Funktionen und den Code korrekt anwendest.