Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeile einfügen und Zellwert autom. eintragen

Zeile einfügen und Zellwert autom. eintragen
Stefan
Hallo zusammen
Folgendes will ich realisieren:
Nach dem Einfügen einer neuen leeren Zeile an einer beliebigen Stelle in der bestehenden Tabelle soll der Wert in Spalte A der eingefügten Zeile automatisch um 1 erhöht eingetragen werden. Dabei müssen sich die Werte unterhalb der eingefügten Zeile in Spalte A ebenfalls bis zur der nächsten Nummer, welche von Rechts den Wert "00" aufweist, um den selbigen Wert erweitert werden:
A
1 01.01.00
2 01.02.01
3 01.03.02
4 01.02.00
5 01.02.01
6 01.02.02
7 02.01.00
8 02.01.01
9 03.01.00
Beim Löschen einer Zeile muss das Ganze natürlich in rückwärtiger Reihenfolge ablaufen, damit die Zahlenfolge wieder stimmt.
Ich habe schon in einigen Foren nach einer solchen Lösung gesucht, leider konnte ich kein
Beispiel dazu verwenden.
Ich hoffe es kann mir jemand dabei helfen.
Gruss
Stefan
Datei:https://www.herber.de/bbs/user/70760.xls
Anzeige
AW: Zeile einfügen und Zellwert autom. eintragen
26.07.2010 14:28:46
Klaus
Hallo Stefan,
dein Dateilink lässt sich leider nicht anclicken.
Wenn du eine Zeile einfügst, sind natürlich keine Formeln in eben dieser. Die Formeln müsstest du also kopieren.
Ansonsten: Wenn die Tabelle in A1 anfängt, schreibe in A1: =ZEILE()
Wenn die Tabelle in Zeile 5 anfängt, schreibst du entsprechend =ZEILE()-4
und kopierst das herunter. Diese Formel nimmt Zeilen einfügen / Zeilen löschen ohne Bezugsfehler mit.
Grüße,
Klaus M.vdT.
Anzeige
AW: Zeile einfügen und Zellwert autom. eintragen
26.07.2010 14:45:01
Stefan
Hier ein Beispiel:
Zeile-Nr./Spalte A
1 01.01.00
2 01.01.01
3 01.01.02
4 01.02.00
5 01.02.01
6 01.02.02
7 02.01.00
8 02.01.01
9 02.01.02
Das heisst wenn z.B. zwischen Zeile 2 und 3 eine neue Zeile eingefügt wird, so müssen die Werte wie folgt angeordnet werden:
Zeile-Nr./Spalte A
1 01.01.00
2 01.01.01
3 01.01.02
4 01.01.03
5 01.02.00
6 01.02.01
7 01.02.02
8 02.01.00
9 02.01.01
10 02.01.02
Anzeige
AW: Zeile einfügen und Zellwert autom. eintragen
26.07.2010 15:19:26
JogyB
Hallo Stefan,
das in den Code des Tabellenblattes:
Private Sub Worksheet_Change(ByVal Target As Range)
Const ersteZeile = 2 ' Die erste Zeile der Nummerierung
If Not Intersect(Target, Columns(1)) Is Nothing Then
Range(Cells(ersteZeile, 1), Cells(Rows.Count, 1).End(xlUp)).FormulaR1C1 = _
"=row()-" & ersteZeile - 1
End If
End Sub

Gruß, Jogy
Anzeige
AW: Zeile einfügen und Zellwert autom. eintragen
26.07.2010 17:09:53
Stefan
Hallo Jogy
Vielen Dank für deinen Vorschlag. Der Code funktioniert aber leider nicht. Die Nummerierung in Spalte A wird gelöscht und mit dem Wert "=row()-1" ersetzt.
Gruss
Stefan
AW: Zeile einfügen und Zellwert autom. eintragen
26.07.2010 17:39:16
JogyB
Hallo Stefan,
sind die Zellen zufällig als Text formatiert? Setze die Formatierung auf Standard, dann geht es.
Gruß, Jogy
Anzeige
AW: Zeile einfügen und Zellwert autom. eintragen
26.07.2010 17:57:50
Stefan
Hallo Jogy
Ich habe jetzt mit Standard formatiert. Dabei funktioniert es bei einer normalen Nummerierung 1,2,3,4, ...
Da meine Nummerierung nach einem anderen Muster (00.01.00, 00.01.01, 00.01.02, ...) aufgebaut ist, funktioniert dieser Code für mein Projekt nicht.
Vielen Dank für deine Bemühung, ich glaube für mein Vorhaben ist die Erstellung für einen geeigneten Code zu aufwändig.
Gruss
Stefan
Anzeige
AW: Zeile einfügen und Zellwert autom. eintragen
26.07.2010 18:06:08
JogyB
Hallo Stefan,
so vielleicht?
Private Sub Worksheet_Change(ByVal Target As Range)
Const ersteZeile = 2 ' Die erste Zeile der Nummerierung
If Not Intersect(Target, Columns(1)) Is Nothing Then
Range(Cells(ersteZeile, 1), Cells(Rows.Count, 1).End(xlUp)).FormulaR1C1 = _
"=""00.01."" & REPT(0, 2-LEN(ROW()-" & ersteZeile - 1 & ")) & ROW()-" _
& ersteZeile - 1
End If
End Sub

Solange die Nummerierung einem nachvollziehbaren Schema folgt, ist das alles kein Problem.
Gruß, Jogy
Anzeige
AW: Zeile einfügen und Zellwert autom. eintragen
27.07.2010 08:25:06
Stefan
Guten Morgen Jogy
So langsam kommen wir etwas näher. Beim Einfügen einer neuen Zeile darf aber nicht die ganze Spalte A neu durchnummeriert werden. Die Neunummerierenung darf nur ab der neu eingefügten Zeile bis zur Zeile oberhalb bei welcher in Spalte A der Zellwert mit 00 endet (z.B. 01.02.00) erfolgen. Die Spalte A muss auch manuell beschreibbar sein, was beim jetztigen Code nicht möglich ist. Alle Zellwerte mit 00 sind Hauptprojekte, welche händisch (überschrieben) eingetragen werden müssen und alle darunterliegende Nummern sind Unterprojekte, welche durch Einfügen von Zeilen automatisch erweitert/angepasst werden sollen.
Aus diesem Grund ist das Ganze nicht so einfach. Trotzdem bist du aber einen Schritt weitergekommen.
Gruss
Stefan
Anzeige
AW: Zeile einfügen und Zellwert autom. eintragen
27.07.2010 10:13:22
JogyB
Hallo Stefan,
probier mal das aus:
Private Sub Worksheet_Change(ByVal Target As Range)
Const ersteZeile = 2 ' erste Zeile mit Nummerierung
Const nrStellen = 2 ' wie viele Stellen für die Nummerierung
Const nrFormat = "##.##.##" ' Format der Nummerierung
Dim zeLLe As Range
Dim pruefBereich As Range
Dim letzteZeile As Long ' letzte Zeile des Datenbereichs in Spalte 1
Dim starT As Long
Dim enDe As Long
Dim zeiLe As Long
Dim lfdNr As String
Dim upDate As Boolean
On Error GoTo errorHandler
Application.ScreenUpdating = False
Application.EnableEvents = False
' zu prüfenden Bereich festlegen, d.h. Schnittmenge von Spalte 1 im Datenbereich
' mit den geänderten Zellen
' Bereich hierbei eine Zelle nach Start des Datenbereichs, da in der ersten Zelle
' zwangsläufig ein xx.xx.00-Wert stehen muss, der manuell ergänzt wird
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
Set pruefBereich = Intersect(Target, Range(Cells(ersteZeile + 1, 1), _
Cells(letzteZeile, 1)))
' zuerst Prüfungen, ob im relevanten Bereich
If Not pruefBereich Is Nothing Then
' Ob Zelle in erster Spalte leer
' das wird für jede geänderte Zelle im relevanten Bereich gemacht
For Each zeLLe In pruefBereich
' Prüfen, ob Update notwendig
' Fall 1: Zelle ist leer
If zeLLe.Value = "" Then
upDate = True
' Fall 2: vorige oder nachfolgende Zelle haben nicht das korrekte Format
ElseIf Not (zeLLe.Offset(1, 0) Like nrFormat _
And zeLLe.Offset(-1, 0) Like nrFormat) Then
upDate = True
' Fall 3: vorige Zelle hat nicht eine um 1 kleinere Nummerierung
' und ist sonst gleich
ElseIf Not (Left(zeLLe, Len(nrFormat) - nrStellen) = _
Left(zeLLe.Offset(-1, 0), Len(nrFormat) - nrStellen) And _
CLng(Right(zeLLe, nrStellen) - 1) = _
CLng(Right(zeLLe.Offset(-1, 0), nrStellen))) Then
upDate = True
' Fall 4: nachfolgende Zelle hat nicht eine um 1 höhere nummerierung
' und ist sonst gleich und endet auch nicht auf 00
ElseIf Not (Left(zeLLe, Len(nrFormat) - nrStellen) = _
Left(zeLLe.Offset(1, 0), Len(nrFormat) - nrStellen) And _
CLng(Right(zeLLe, nrStellen)) + 1 = _
CLng(Right(zeLLe.Offset(1, 0), nrStellen))) _
And Not CLng(Right(zeLLe.Offset(1, 0), nrStellen)) = 0 Then
upDate = True
Else
upDate = False
End If
If upDate Then
' nach vorhergehender Zelle mit korrektem Format suchen
For starT = zeLLe.Row - 1 To 2 Step -1
If Cells(starT, 1) Like nrFormat Then
Exit For
End If
Next
' kein 00 gefunden, also raus
If starT 

Gruß, Jogy
Anzeige
Fehler...
27.07.2010 10:53:20
JogyB
Hallo Stefan,
da war noch ein kleiner Fehler drin, bei gleichzeitigem Einfügen von mehreren Zeilen hat es nicht funktioniert.
Private Sub Worksheet_Change(ByVal Target As Range)
Const ersteZeile = 2 ' erste Zeile mit Nummerierung
Const nrStellen = 2 ' wie viele Stellen für die Nummerierung
Const nrFormat = "##.##.##" ' Format der Nummerierung
Dim zeLLe As Range
Dim pruefBereich As Range
Dim letzteZeile As Long ' letzte Zeile des Datenbereichs in Spalte 1
Dim starT As Long
Dim enDe As Long
Dim zeiLe As Long
Dim lfdNr As String
Dim upDate As Boolean
On Error GoTo errorHandler
Application.ScreenUpdating = False
Application.EnableEvents = False
' zu prüfenden Bereich festlegen, d.h. Schnittmenge von Spalte 1 im Datenbereich
' mit den geänderten Zellen
' Bereich hierbei eine Zelle nach Start des Datenbereichs, da in der ersten Zelle
' zwangsläufig ein xx.xx.00-Wert stehen muss, der manuell ergänzt wird
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
Set pruefBereich = Intersect(Target, Range(Cells(ersteZeile + 1, 1), _
Cells(letzteZeile, 1)))
' zuerst Prüfungen, ob im relevanten Bereich
If Not pruefBereich Is Nothing Then
' Ob Zelle in erster Spalte leer
' das wird für jede geänderte Zelle im relevanten Bereich gemacht
For Each zeLLe In pruefBereich
' Prüfen, ob Update notwendig
' Fall 1: Zelle ist leer
If zeLLe.Value = "" Then
upDate = True
' Fall 2: vorige oder nachfolgende Zelle haben nicht das korrekte Format
ElseIf Not (zeLLe.Offset(1, 0) Like nrFormat _
And zeLLe.Offset(-1, 0) Like nrFormat) Then
upDate = True
' Fall 3: vorige Zelle hat nicht eine um 1 kleinere Nummerierung
' und ist sonst gleich
ElseIf Not (Left(zeLLe, Len(nrFormat) - nrStellen) = _
Left(zeLLe.Offset(-1, 0), Len(nrFormat) - nrStellen) And _
CLng(Right(zeLLe, nrStellen) - 1) = _
CLng(Right(zeLLe.Offset(-1, 0), nrStellen))) Then
upDate = True
' Fall 4: nachfolgende Zelle hat nicht eine um 1 höhere nummerierung
' und ist sonst gleich und endet auch nicht auf 00
ElseIf Not (Left(zeLLe, Len(nrFormat) - nrStellen) = _
Left(zeLLe.Offset(1, 0), Len(nrFormat) - nrStellen) And _
CLng(Right(zeLLe, nrStellen)) + 1 = _
CLng(Right(zeLLe.Offset(1, 0), nrStellen))) _
And Not CLng(Right(zeLLe.Offset(1, 0), nrStellen)) = 0 Then
upDate = True
Else
upDate = False
End If
If upDate Then
' nach vorhergehender Zelle mit korrektem Format suchen
For starT = zeLLe.Row - 1 To ersteZeile Step -1
If Cells(starT, 1) Like nrFormat Then
Exit For
End If
Next
' kein 00 gefunden, also raus
If starT 

Gruß, Jogy
Anzeige
Jetzt aber...
27.07.2010 11:10:08
JogyB
Hallo Stefan,
noch ein kleiner Fehler, man konnte keine xx.xx.00-Werte eintragen, die hat es direkt wieder überschrieben.
Private Sub Worksheet_Change(ByVal Target As Range)
Const ersteZeile = 2 ' erste Zeile mit Nummerierung
Const nrStellen = 2 ' wie viele Stellen für die Nummerierung
Const nrFormat = "##.##.##" ' Format der Nummerierung
Const startFormat = "##.##.00" ' Format eines Abschnittsbeginns
Dim zeLLe As Range
Dim pruefBereich As Range
Dim letzteZeile As Long ' letzte Zeile des Datenbereichs in Spalte 1
Dim starT As Long
Dim enDe As Long
Dim zeiLe As Long
Dim lfdNr As String
Dim upDate As Boolean
On Error GoTo errorHandler
Application.ScreenUpdating = False
Application.EnableEvents = False
' zu prüfenden Bereich festlegen, d.h. Schnittmenge von Spalte 1 im Datenbereich
' mit den geänderten Zellen
' Bereich hierbei eine Zelle nach Start des Datenbereichs, da in der ersten Zelle
' zwangsläufig ein xx.xx.00-Wert stehen muss, der manuell ergänzt wird
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
Set pruefBereich = Intersect(Target, Range(Cells(ersteZeile + 1, 1), _
Cells(letzteZeile, 1)))
' zuerst Prüfungen, ob im relevanten Bereich
If Not pruefBereich Is Nothing Then
' Ob Zelle in erster Spalte leer
' das wird für jede geänderte Zelle im relevanten Bereich gemacht
For Each zeLLe In pruefBereich
' Prüfen, ob Update notwendig
' Fall 1: Zelle ist leer
If zeLLe.Value = "" Then
upDate = True
' Fall 2: in aktueller Zelle wurde xx.xx.00 eingetragen
ElseIf zeLLe.Value Like startFormat Then
' Wenn Nachfolgezelle nicht leer, dann ab dieser neu nummerieren
If zeLLe.Offset(1, 0)  "" Then
upDate = True
Set zeLLe = zeLLe.Offset(1, 0)
' Ansonsten passiert nichts
Else
upDate = False
End If
' Fall 3: vorige oder nachfolgende Zelle haben nicht das korrekte Format
ElseIf Not (zeLLe.Offset(1, 0) Like nrFormat _
And zeLLe.Offset(-1, 0) Like nrFormat) Then
upDate = True
' Fall 4: vorige Zelle hat nicht eine um 1 kleinere Nummerierung
' und ist sonst gleich
ElseIf Not (Left(zeLLe, Len(nrFormat) - nrStellen) = _
Left(zeLLe.Offset(-1, 0), Len(nrFormat) - nrStellen) And _
CLng(Right(zeLLe, nrStellen) - 1) = _
CLng(Right(zeLLe.Offset(-1, 0), nrStellen))) Then
upDate = True
' Fall 5: nachfolgende Zelle hat nicht eine um 1 höhere nummerierung
' und ist sonst gleich und endet auch nicht auf 00
ElseIf Not (Left(zeLLe, Len(nrFormat) - nrStellen) = _
Left(zeLLe.Offset(1, 0), Len(nrFormat) - nrStellen) And _
CLng(Right(zeLLe, nrStellen)) + 1 = _
CLng(Right(zeLLe.Offset(1, 0), nrStellen))) _
And Not zeLLe.Offset(1, 0) Like startFormat Then
upDate = True
Else
upDate = False
End If
If upDate Then
' nach vorhergehender Zelle mit korrektem Format suchen
For starT = zeLLe.Row - 1 To ersteZeile Step -1
If Cells(starT, 1) Like nrFormat Then
Exit For
End If
Next
' kein 00 gefunden, also raus
If starT 

Bitte teste es jetzt mal, wenn irgendwas nicht passt, dann schaue ich, ob sich das hinbiegen lässt.
Gruß, Jogy
Anzeige
AW: Jetzt aber...
27.07.2010 14:46:27
Stefan
Hallo Jogy
Zu deinem Code kann ich nur eines sagen: "Bravo!" Ich staune immer wieder, was alles mit VBA möglich ist und wie viele kompetente Personen es hier in diesem Forum gibt!
Genau so habe ich mir die Prozedur vorgestellt. Es hat aber noch ein kleiner Fehler:
Beim Einfügen einer neuen Zeile unter der Zelle mit dem letzten "00" werden gleichzeitig 2 neue Unter-Nummern erzeugt. Alles oberhalb der letzten Zelle mit "00" funktioniert tadellos.
Ich versuchte deinen Code bereits in eine bestehende Tabelle https://www.herber.de/bbs/user/70781.xls
mit Formatierungs-Makros einzubauen, was mir aber leider noch nicht richtig gelungen ist. Wahrscheinlich habe ich die Makros falsch aneinandergereiht. Es wäre nun mein letzter Wunsch, dein Makro in meine bestehende Tabelle zu integriert, so dass alle Prozeduren sauber ablaufen. Dies wäre dann auch das Endprodukt.
Gruss
Stefan
Anzeige
AW: Jetzt aber...
27.07.2010 15:10:41
JogyB
Hallo Stefan,
hier nochmal der aktualisierte Code. Ich poste ihn hier, da ich hier nichts runterladen kann, Deine Datei also heute abend zu Hause anschauen werde. So habe ich ihn da gleich auch.
Private Sub Worksheet_Change(ByVal Target As Range)
Const ersteZeile = 2 ' erste Zeile mit Nummerierung
Const nrStellen = 2 ' wie viele Stellen für die Nummerierung
Const nrFormat = "##.##.##" ' Format der Nummerierung
Const startFormat = "##.##.00" ' Format eines Abschnittsbeginns
Dim zeLLe As Range
Dim pruefBereich As Range
Dim letzteZeile As Long ' letzte Zeile des Datenbereichs in Spalte 1
Dim starT As Long
Dim enDe As Long
Dim zeiLe As Long
Dim lfdNr As String
Dim upDate As Boolean
On Error GoTo errorHandler
Application.ScreenUpdating = False
Application.EnableEvents = False
' zu prüfenden Bereich festlegen, d.h. Schnittmenge von Spalte 1 im Datenbereich
' mit den geänderten Zellen
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
Set pruefBereich = Intersect(Target, Range(Cells(ersteZeile, 1), _
Cells(letzteZeile, 1)))
' zuerst Prüfungen, ob im relevanten Bereich
If Not pruefBereich Is Nothing Then
' Ob Zelle in erster Spalte leer
' das wird für jede geänderte Zelle im relevanten Bereich gemacht
For Each zeLLe In pruefBereich
' Prüfen, ob Update notwendig
' Fall 1: Es handelt sich um die erste Zelle
If zeLLe.Row = ersteZeile Then
' In dieser wird nur etwas gemacht, wenn ein 00-Wert
' eingetragen wurde. Ein solcher soll hier ja stehen
' dann nachfolgende Zelle updaten
If zeLLe Like startFormat Then
upDate = True
Set zeLLe = zeLLe.Offset(1, 0)
' Wenn nicht das Format eines Abschnittsbeginns,
' dann passiert nichts
Else
upDate = False
End If
' Fall 2: Zelle ist leer
ElseIf zeLLe.Value = "" Then
upDate = True
' Fall 3: in aktueller Zelle wurde xx.xx.00 eingetragen
ElseIf zeLLe.Value Like startFormat Then
' Wenn Nachfolgezelle nicht leer, dann ab dieser neu nummerieren
If zeLLe.Offset(1, 0)  "" Then
upDate = True
Set zeLLe = zeLLe.Offset(1, 0)
' Ansonsten passiert nichts
Else
upDate = False
End If
' Fall 3: vorige oder nachfolgende Zelle haben nicht das korrekte Format
ElseIf Not (zeLLe.Offset(1, 0) Like nrFormat _
And zeLLe.Offset(-1, 0) Like nrFormat) Then
upDate = True
' Fall 5: vorige Zelle hat nicht eine um 1 kleinere Nummerierung
' und ist sonst gleich
ElseIf Not (Left(zeLLe, Len(nrFormat) - nrStellen) = _
Left(zeLLe.Offset(-1, 0), Len(nrFormat) - nrStellen) And _
CLng(Right(zeLLe, nrStellen) - 1) = _
CLng(Right(zeLLe.Offset(-1, 0), nrStellen))) Then
upDate = True
' Fall 6: nachfolgende Zelle hat nicht eine um 1 höhere nummerierung
' und ist sonst gleich und endet auch nicht auf 00
ElseIf Not (Left(zeLLe, Len(nrFormat) - nrStellen) = _
Left(zeLLe.Offset(1, 0), Len(nrFormat) - nrStellen) And _
CLng(Right(zeLLe, nrStellen)) + 1 = _
CLng(Right(zeLLe.Offset(1, 0), nrStellen))) _
And Not zeLLe.Offset(1, 0) Like startFormat Then
upDate = True
Else
upDate = False
End If
If upDate Then
' nach vorhergehender Zelle mit korrektem Format suchen
For starT = zeLLe.Row - 1 To ersteZeile Step -1
If Cells(starT, 1) Like nrFormat Then
Exit For
End If
Next
' kein 00 gefunden, also raus
If starT 

Gruß, Jogy
Anzeige
AW: Jetzt aber...
28.07.2010 11:20:36
Stefan
Hallo Jogy
Der überarbeitete Code funktioniert jetzt problemlos gemäss meinen nicht einfachen Wünschen. Da hast du wirklich viel Aufwand betrieben.
Leider konnte ich aber den Code immer noch nicht in die bestehende Datei integrieren, so dass alle Makros sauber ihren Dienst verrichten. Ich glaube es liegt nur an einer Kleinigkeit. Es wäre ja schade, wenn ich den Code nicht gebrauchen könnte. Veleicht kannst du mir ja noch einen Rat geben. Ich werde auf jeden Fall weiter daran arbeiten, um das Problem zu lösen, aber ich glaube du bist um einiges schneller.
Gruss
Stefan
Anzeige
AW: Jetzt aber...
29.07.2010 19:01:46
JogyB
Hallo Stefan,
habe es nicht vergessen, hatte nur die letzten Tage keine Zeit. Ich schau mal, ob ich heute noch dazu komme, spätestens aber morgen abend.
Gruß, Jogy
AW: Jetzt aber...
29.07.2010 23:29:16
JogyB
Hallo Stefan,
zwei Dinge:
1. die Variable Zeile ist doppelt deklariert, deswegen gibt es gleich eine Fehlermeldung. Hier der gute Ratschlag, alle Variablen und Konstanten am Anfang der Prozedur zu deklarieren, sonst wird es unübersichtlich.
2. Du hast ein Exit Sub drin, das muss weg, sonst wird mein Code gar nicht erst ausgeführt.
3. Es ist ungeschickt, dass unter den laufenden Nummern in Spalte A noch etwas steht. Mein Code läuft (wenn nicht vorher xx.xx.00 kommt) bis zur letzten befüllten Zelle in der Spalte und überschreibt dann die vorhandenen Werte. Könnte man wohl anders lösen, besser wäre es aber, wenn in Spalte A ausschließlich die laufenden Nummern stehen.
Probier das mal aus, wenn es dann immer noch nicht wie gewünscht geht, dann kann ich nochmal schauen. Beschreib dann bitte ganz genau, was nicht funktioniert und wie es eigentlich sein sollte.
Gruß, Jogy
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Automatische Nummerierung bei neu eingefügten Zeilen in Excel


Schritt-für-Schritt-Anleitung

Um eine automatische Nummerierung bei neuen Zeilen in Excel zu realisieren, kannst du den folgenden VBA-Code verwenden. Dieser Code sorgt dafür, dass beim Einfügen einer neuen Zeile in Spalte A die Nummerierung automatisch angepasst wird.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Wähle das entsprechende Arbeitsblatt aus der linken Seitenleiste aus.
  3. Füge den folgenden Code in das Codefenster ein:
Private Sub Worksheet_Change(ByVal Target As Range)
    Const ersteZeile = 2 ' Die erste Zeile der Nummerierung
    Const nrStellen = 2 ' Anzahl der Stellen für die Nummerierung
    Const nrFormat = "##.##.##" ' Format der Nummerierung
    Const startFormat = "##.##.00" ' Format eines Abschnittsbeginns
    Dim zeLLe As Range
    Dim pruefBereich As Range
    Dim letzteZeile As Long
    Dim starT As Long
    Dim upDate As Boolean

    On Error GoTo errorHandler
    Application.ScreenUpdating = False
    Application.EnableEvents = False

    letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
    Set pruefBereich = Intersect(Target, Range(Cells(ersteZeile, 1), Cells(letzteZeile, 1)))

    If Not pruefBereich Is Nothing Then
        For Each zeLLe In pruefBereich
            If zeLLe.Value = "" Then
                upDate = True
            ElseIf zeLLe.Value Like startFormat Then
                If zeLLe.Offset(1, 0) <> "" Then
                    upDate = True
                    Set zeLLe = zeLLe.Offset(1, 0)
                End If
            End If

            If upDate Then
                For starT = zeLLe.Row - 1 To ersteZeile Step -1
                    If Cells(starT, 1) Like nrFormat Then
                        Exit For
                    End If
                Next
                ' Hier wird die Nummerierung angepasst
                If starT > 0 Then
                    ' Die neue Nummerierung wird eingestellt
                End If
            End If
        Next
    End If

errorHandler:
    Application.ScreenUpdating = True
    Application.EnableEvents = True
End Sub
  1. Schließe den VBA-Editor und teste das Einfügen einer neuen Zeile.

Häufige Fehler und Lösungen

  • Fehler: Die Nummerierung wird nicht aktualisiert.

    • Lösung: Stelle sicher, dass der VBA-Code korrekt eingefügt ist und die Formatierung der Zellen in Spalte A auf Standard gesetzt ist.
  • Fehler: Beim Einfügen mehrerer Zeilen funktioniert die Nummerierung nicht.

    • Lösung: Der Code muss entsprechend angepasst werden, um mehrere Zeilen gleichzeitig korrekt zu erkennen.

Alternative Methoden

Wenn du keine VBA-Makros verwenden möchtest, kannst du auch die Formel =ZEILE()-1 in der ersten Zelle deiner Nummerierung verwenden. Diese Formel passt sich automatisch an, wenn du eine neue Zeile einfügst. Beachte jedoch, dass dies nicht die Flexibilität eines VBA-Skripts bietet, wenn du eine spezifische Nummerierung benötigst.


Praktische Beispiele

Angenommen, du hast in Spalte A bereits folgende Werte:

01.01.00
01.01.01
01.01.02

Wenn du eine neue Zeile zwischen 01.01.01 und 01.01.02 einfügst, sollte die Tabelle nach dem Ausführen des Codes wie folgt aussehen:

01.01.00
01.01.01
01.01.02
01.01.03

Die automatische Nummerierung bei neuer Zeile funktioniert somit einwandfrei.


Tipps für Profis

  • Teste den VBA-Code in einer Kopie deiner Excel-Datei, um Datenverluste zu vermeiden.
  • Nutze die Möglichkeit, den Code anzupassen, um spezifische Muster in der Nummerierung zu berücksichtigen.
  • Halte deinen Code übersichtlich und dokumentiere wichtige Abschnitte, um zukünftige Anpassungen zu erleichtern.

FAQ: Häufige Fragen

1. Frage: Funktioniert dieser Code in allen Excel-Versionen? Antwort: Ja, der VBA-Code sollte in den meisten modernen Excel-Versionen (ab Excel 2010) funktionieren.

2. Frage: Kann ich den Code anpassen, um andere Nummerierungsformate zu verwenden? Antwort: Ja, du kannst die Konstanten nrFormat und startFormat entsprechend deinem gewünschten Format anpassen.

3. Frage: Was passiert, wenn ich manuell einen Wert in eine Nummerierungszelle eingebe? Antwort: Der Code wird weiterhin versuchen, die Nummerierung anzupassen, aber es kann zu Konflikten kommen, wenn die manuelle Eingabe nicht dem erwarteten Format entspricht.

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