Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Zeile per VBA Einfügen oberhalb bestimmter Werte

Zeile per VBA Einfügen oberhalb bestimmter Werte
10.10.2018 11:56:51
Maxi
Hallo zusammen,
hänge momentan an folgendem Problem:
Ich habe eine automatisch generierte Liste bei der in Spalte B Produktnummern stehen.
Die Nummern sehen folgendermaßen aus: 1000-1234.
Es sind mehrere Produkte vorhanden. (1000-1234, 1000-1235; 2000-1234 etc.) und die Produkte sind auch schon nach den ersten vier Ziffern geordnet.
Die ersten 4 Ziffern beziehen sich immer auf das Produkt. Nun hätte ich gerne, dass wenn die Produktgruppe 1000-xxxx auftaucht es mir eine Zeile oberhalb einfügt und diesen gleich mit dem Inhalt "Produkt A" schreibt. Wenn das erste mal 2000-xxxx kommt, soll eine Zeile mit "Produktgruppe B" eingefügt werden etc.
Habe nun folgendermaßen angefangen:
Sub insert()
Dim i As Long
Application.ScreenUpdating = False
For i = Cells(Rows.Count, "B").End(xlUp).Row To 1 Step -1
If InStr(LCase(Cells(i, "B")), "1000-") > 0 Then
Cells(i, "B").EntireRow.insert
End If
If InStr(LCase(Cells(i, "B")), "2000-") > 0 Then
Cells(i, "B").EntireRow.insert
End If
Next
Application.ScreenUpdating = False
End Sub

Hier fügt mir das Makro aber oberhalb jeder Nummer eine Zeile ein. Ich möchte aber, dass mir nur einmal eine Zeile mit dem entsprechenden Produktname eingefügt wird.
Hoffe ich konnte das Problem halbwegs verständlich beschreiben und mir kann jemand weiterhelfen.
Vielen Dank!
Grüße Maxi
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Zeile per VBA Einfügen oberhalb bestimmter Werte
10.10.2018 12:18:49
Rudi
Hallo,
Sub insert()
Dim i As Long
Application.ScreenUpdating = False
For i = Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1
If Cells(i - 1, 2)  Cells(i, 2) Then
If InStr(LCase(Cells(i, "B")), "1000-") > 0 Then
Cells(i, "B").EntireRow.insert
End If
If InStr(LCase(Cells(i, "B")), "2000-") > 0 Then
Cells(i, "B").EntireRow.insert
End If
End If
Next
Application.ScreenUpdating = False
End Sub

Gruß
Rudi
Anzeige
AW:Zeile per VBA Einfügen oberhalb bestimmter Wert
10.10.2018 13:06:56
Maxi
Hallo Rudi,
funktioniert leider noch nicht. Das Makro fügt mir immer noch über jeder Produktnummer eine Zeile ein. Ich möchte aber, dass er mir nur über jeder Produktgruppe eine Zeile einfügt.
Maxi
Zeile per VBA Einfügen oberhalb bestimmter Wert
10.10.2018 13:28:49
Maxi
Sollte schlussendlich etwa so aussehen:
https://www.herber.de/bbs/user/124539.xlsx
Anzeige
AW: Zeile per VBA Einfügen oberhalb bestimmter Wert
10.10.2018 14:51:44
PeterK
Hallo
Option Explicit

Sub insert()
    Dim i As Long
    Dim myProdNr As String

    Application.ScreenUpdating = False
   
    myProdNr = Mid(Cells(Rows.Count, "A").End(xlUp).Value, 1, 5)

    For i = Cells(Rows.Count, "A").End(xlUp).Row To 2 Step -1

        If Mid(Cells(i - 1, "A").Value, 1, 5) <> myProdNr Then
            Cells(i, "A").EntireRow.insert
            myProdNr = Mid(Cells(i - 1, "A").Value, 1, 5)
            DoEvents
        End If
    Next

    Application.ScreenUpdating = True
End Sub

VBA/HTML-CodeConverter, AddIn für Office 2002-2016 - in VBA geschrieben von Lukas Mosimann. Projektbetreuung:RMH Software & Media

Code erstellt und getestet in Office 15 - mit VBAHTML 12.6.0


Anzeige
Zeile per VBA Einfügen oberhalb bestimmter Wert
11.10.2018 08:36:44
Maxi
Hallo Peter,
das funktioniert soweit, dass es mir wenn sich die Nummer ändert, automatisch eine Teile darüber einfügt.
Jetzt wäre es für mich noch hilfreich, dass bei jeder Zeile, die eingefügt wird es mir den Produktnamen automatisch eintragen würde und mit einer bestimmten Farbe füllen würde (colorindex xx).
Bsp. für Materialnummer 1000-xxxx die Produktgruppe XXX.
Perfektionieren würde es mir das ganze noch, wenn es mir automatisch die Zeilen innerhalb einer Produktgruppe auswählt und nach Spalte B im Datum absteigend sortiert. Habe euch das ganze mal beispielhaft dargestellt.
https://www.herber.de/bbs/user/124556.xlsx
Danke für eure Hilfe!
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Zeile per VBA einfügen oberhalb bestimmter Werte


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA eine Zeile oberhalb bestimmter Werte einzufügen, kannst du folgendes Makro verwenden. Dieses Beispiel geht davon aus, dass die Produktnummern in Spalte B stehen und du eine Zeile für die Produktgruppen 1000-xxxx und 2000-xxxx einfügen möchtest.

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code ein:
Sub insert()
    Dim i As Long
    Dim myProdNr As String

    Application.ScreenUpdating = False

    For i = Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1
        myProdNr = Mid(Cells(i, "B").Value, 1, 5)

        If i = Cells(Rows.Count, "B").End(xlUp).Row Or myProdNr <> Mid(Cells(i + 1, "B").Value, 1, 5) Then
            Cells(i, "B").EntireRow.Insert
            Cells(i, "B").Value = "Produktgruppe " & myProdNr
        End If
    Next i

    Application.ScreenUpdating = True
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Makro aus, indem du ALT + F8 drückst, das Makro wählst und auf Ausführen klickst.

Häufige Fehler und Lösungen

  • Problem: Das Makro fügt eine Zeile für jede Produktnummer ein.

    • Lösung: Stelle sicher, dass du den Code so anpasst, dass er nur eine Zeile für jede Produktgruppe einfügt. Die oben gezeigte Logik prüft, ob die Produktnummer sich ändert, bevor eine Zeile eingefügt wird.
  • Problem: Das Makro funktioniert nicht wie erwartet.

    • Lösung: Überprüfe, ob deine Excel-Version die Ausführung von Makros unterstützt und ob die Makros aktiviert sind.

Alternative Methoden

Anstelle von VBA kannst du auch die Funktion "Daten sortieren" in Excel verwenden, um die Produktnummern manuell zu gruppieren und dann eine Zeile oberhalb jeder Gruppe hinzuzufügen. Dies ist jedoch weniger automatisiert und erfordert mehr manuelle Eingaben.


Praktische Beispiele

Hier ist ein praktisches Beispiel, wie du den Code anpassen kannst, um die eingefügten Zeilen auch farblich zu formatieren:

Sub insert()
    Dim i As Long
    Dim myProdNr As String

    Application.ScreenUpdating = False

    For i = Cells(Rows.Count, "B").End(xlUp).Row To 2 Step -1
        myProdNr = Mid(Cells(i, "B").Value, 1, 5)

        If i = Cells(Rows.Count, "B").End(xlUp).Row Or myProdNr <> Mid(Cells(i + 1, "B").Value, 1, 5) Then
            Cells(i, "B").EntireRow.Insert
            Cells(i, "B").Value = "Produktgruppe " & myProdNr
            Cells(i, "B").Interior.ColorIndex = 6 ' Gelb
        End If
    Next i

    Application.ScreenUpdating = True
End Sub

Dieses Beispiel fügt eine gelbe Hintergrundfarbe für die neu eingefügten Zeilen hinzu.


Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies verhindert Fehler durch Tippfehler in Variablennamen.
  • Teste dein Makro zuerst in einer Kopie deiner Datei, um unerwünschte Änderungen an deinen Originaldaten zu vermeiden.
  • Nutze die DoEvents-Anweisung, um sicherzustellen, dass Excel während der Ausführung des Makros nicht einfriert.

FAQ: Häufige Fragen

1. Wie kann ich das Makro anpassen, um mehr Produktgruppen einzufügen? Du kannst einfach weitere If-Bedingungen im Code hinzufügen, um weitere Produktgruppen zu berücksichtigen.

2. Funktioniert dieser Code in allen Excel-Versionen? Der VBA-Code sollte in den meisten modernen Excel-Versionen (z.B. 2010, 2013, 2016, 2019 und Office 365) funktionieren. Stelle sicher, dass deine Makros aktiviert sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige