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

Forumthread: Zeile einfügen wenn Zelle gefüllt

Zeile einfügen wenn Zelle gefüllt
29.07.2015 12:44:36
ronforum
Hallo :)
ich habe mich schon informiert, aber so richtig komm ich leider nicht auf die Lösung. Ich würde gerne in bestimmten Fällen eine Zeile einfügen.
Die Arbeitsmappe enthält eine variable Anzahl an Tabellenblättern. Jedes Tabellenblatt enthält Daten die in einem Übersichtsblatt gesammelt werden. Die Sammlung geschieht bereits über ein Makro.
Es gibt nun eine Spalte in die möglicherweise mehr als nur eine Zelle eingefügt werden muss. Zum einen soll sie die Daten aus Zelle F9 kopieren werden, und die Zellen F12 und F15 überprüft werden. Falls diese Daten enthalten soll für jede gefüllte Zelle eine neue Zeile erstellt werden und der Wert unter dem bereits kopierten Wert eingefügt werden.
Habt ihr dafür einen Ansatz?
Beste Grüße und vielen Dank
Ron

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Ansatz
30.07.2015 18:47:06
Frank
Hallo Ron,
der Ansatz wäre, das Ganze mal mit eingeschaltetem Makrorekorder aufzuzeichnen und das dann den Erfordernissen entsprechend zu ändern. Die Prüfungen und Bedingungen hast Du ja schon alle aufgezählt.
Kriegst Du das nicht hin, ist VBA bescheiden zu dick aufgetragen und das Ganze ein Fall dafür: https://www.herber.de/develop.html
Grüsse,
Frank

Anzeige
AW: Zeile einfügen wenn Zelle gefüllt
03.08.2015 16:08:33
team11team
Hi Frank,
danke für diese eher wenig hilfreiche Antwort.
Vielleicht kann mir jemand anderes helfen. Mein Ansatz sieht bis jetzt so aus. Klappt aber noch nicht so ganz.
Sub Test()
Dim lngSheets   As Long
Dim t           As Long
Dim p           As Long
lngSheets = ThisWorkbook.Sheets.Count
For t = 9 To 1 Step -1
For p = 1 To lngSheets
If ThisWorkbook.Sheets(p).Cells(12, 6).Value  "" Then
Rows(t).Insert shift:=xlDown
ThisWorkbook.Sheets(p).Cells(12, 6).Value = Cells(t + 1, 11).Value
t = t + 2
Else
t = t + 1
End If
Next p
Next t
End Sub
Kann mir jemand helfen den Ansatz weiterzuentwickeln, so das er läuft.
Vielen Dank
Grüße
Ron

Anzeige
AW: Zeile einfügen wenn Zelle gefüllt
03.08.2015 16:37:46
Frank
Hallo Ron,
Ja, ich schon wieder...
So ein Posting sieht man doch schon lieber. Das zeigt, dass sich der Fragesteller schon mal Gedanken gemacht hat.
Rows(t).Insert shift:=xlDown da gehört ein Zellbezug vorangestellt, damit XL weiss, wo es einfügen soll. So, wie es jetzt da steht, passiert das bei der eher zufällig durch Cursor ausgewählten Zelle.
Was jetzt
Grüsse,
Frank

Anzeige
AW: Zeile einfügen wenn Zelle gefüllt
04.08.2015 14:47:20
ronforum
Hi Frank,
wir näheren uns einer guten Antwort ;)
Der Zellenbezug ist doch die Variable "t" durch die er wissen soll welche Zeile er nimmt um dann einzufügen. Reicht dieser Bezug noch nicht?
Wie würdest du es machen?
Gruß
Ron

AW: Zeile einfügen wenn Zelle gefüllt
04.08.2015 15:01:50
EtoPHG
Hallo Ron oder Hans oder Team oder wer auch immer!,
Ich würde ihm(?) noch mitteilen, zu welchem Workbook und welchem Worksheet das Rows(t) gehört! Im Vergleich machst du das ja auch!
Gruess Hansueli

Anzeige
AW: Zeile einfügen wenn Zelle gefüllt
04.08.2015 15:25:14
ronforum
Hi Hansueli,
sorry bin mit den meinem neuen und alten Benutzer durcheinander gekommen.
Ich hab versucht das Makro soweit anzupassen, aber es klappt nicht.
 ThisWorkbook.Sheets("KapaPlanung").Rows(t).Insert shift:=xlDown
Bin wirklich dankbar für eure Hilfe.
Gruß
Ron

Anzeige
Kraut und Rüben
04.08.2015 16:23:00
Frank
Hallo Ron,
die Frage ist, was da nicht klappt.
Sheets(1).Rows(10).Insert shift:=xlDown
fügt bei Zeile 10 eine neue Zeile ein.
Sheets(1).Cells(10, 4).Insert shift:=xlDown
fügt bei D10 eine neue Zelle ein und verschiebt den Rest nach unten.
So lange Du nur in dieser einen Mappe arbeitest, kannst Du Dir ThisWorkbook sparen.
Es gibt nun eine Spalte in die möglicherweise mehr als nur eine Zelle eingefügt werden muss. Zum einen soll sie die Daten aus Zelle F9 kopieren werden, und die Zellen F12 und F15 überprüft werden. Falls diese Daten enthalten soll für jede gefüllte Zelle eine neue Zeile erstellt werden und der Wert unter dem bereits kopierten Wert eingefügt werden.
Der erste Satz sagt nicht klar aus, ob eine Zeile oder eine Zelle eingefügt werden muss.
Im zweiten Satz sagst Du zwar, woher die Daten kommen, aber nicht, wo sie hin sollen.
Im dritten Satz ist nicht klar von welchem Wert Du sprichst, der unter einem anderen nicht spezifizierten Wert eingefügt werden soll.
Es können also pro Blatt maximal 2 Zeilen dazukommen? Eine, wenn F12 gefüllt ist, und eine, wenn F15 gefüllt ist? Und in beide soll der Wert aus F9 kopiert werden? Oder in die erste der von F9,in die 2. der von F10?
Grüsse,
Frank

Anzeige
AW: Kraut und Rüben
04.08.2015 17:32:28
ronforum
Hi Frank,
ok dann versuch ich es nochmal.
eine Arbeitsmappe - beliebig viele Tabellenblätter - Tabellenblätter alle gleich aufgebaut (bis auf das erste) - Tabellenblatt 1 ist eine Gesamtaufstellung aller Tabellenblätter
F9: der Wert wird aus jedem Tabellenblatt in Tabellenblatt 1 kopiert (start bei K9 dann untereinander)
F12: ab Tabellenblatt2 überprüfen ob Zelle gefüllt. Wenn Zelle gefüllt, dann wird im Tabellenblatt 1 unter der Zeile vom zugehörigen F9 eine neue Zeile eingefügt und dann entsprechender Wert aus F12 unter F9 kopiert.
F15: gleich wie bei F12 (nur mit F15)
Schritt für Schritt sollen die einzelnen Tabellenblätter durchgegangen werden. Wenn was passieren soll im Sinne von Zeile einfügen dann immer nur auf dem ersten Blatt.
Im Moment rechnet sich das Makro zu Tode.
Aktueller Stand:
Sub KapaPlanungAktualisieren()
Dim t As Long
Dim p As Long
Dim i As Long
lngSheets = ThisWorkbook.sheets.Count
For i = 3 To lngSheets
ThisWorkbook.sheets("KapaPlanung").Cells(6 + i, 11) = ThisWorkbook.sheets(i).Cells(9, 6)     _
lngSheets = ThisWorkbook.sheets.Count
For t = 9 To 1 Step -1
For p = 1 To lngSheets
If ThisWorkbook.sheets(p).Cells(12, 6).Value  "" Then
sheets("KapaPlanung").Rows(t).Insert shift:=xlDown
ThisWorkbook.sheets(p).Cells(12, 6).Value = Cells(t + 1, 11).Value
t = t + 2
If ThisWorkbook.sheets(p).Cells(15, 6).Value  "" Then
sheets("KapaPlanung").Rows(t).Insert shift:=xlDown
ThisWorkbook.sheets(p).Cells(12, 6).Value = Cells(t + 1, 11).Value
t = t + 3
Else
t = t + 1
End If
Next p
Next t
Next i
End Sub
Ich finde leider den Fehler nicht. Wahrscheinlich wieder variablen nicht genau definiert -.-
Ein Ansatz? :)
Beste Grüße
Ron

Anzeige
Aufräumarbeiten
05.08.2015 15:31:22
Frank
Hallo Ron,
ThisWorkbook.sheets("KapaPlanung").Cells(6 + i, 11) = ThisWorkbook.sheets(i).Cells(9, 6) _
lngSheets = ThisWorkbook.sheets.Count
For t = 9 To 1 Step -1
For p = 1 To lngSheets

Das fett markierte kann raus, wenn sich die Anzahl der Blätter zwischenzeitlich nicht geändert hat.
F12: ab Tabellenblatt2 überprüfen ob Zelle gefüllt. Du prüfst ab Tabellenblatt 1:
If ThisWorkbook.sheets(p).Cells(12, 6).Value "" Then bei For p = 1 To lngSheets
Ausserdem sollte Dir obiger Code beim Kompilieren eine Fehlermeldung an den Kopf werfen: «Fehler beim Kompilieren: If-Block ohne End If»
Tipp: Beispielmappen helfen nicht nur den Helfern.
Grüsse,
Frank
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zeile einfügen, wenn Zelle gefüllt


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und aktiviere das VBA-Entwicklertools. Du kannst dies tun, indem du die ALT + F11-Taste drückst.

  2. Erstelle ein neues Modul. Klicke auf Einfügen und wähle Modul.

  3. Füge den folgenden VBA-Code ein:

    Sub KapaPlanungAktualisieren()
       Dim t As Long
       Dim p As Long
       Dim i As Long
       Dim lngSheets As Long
       lngSheets = ThisWorkbook.Sheets.Count
    
       For i = 3 To lngSheets
           ThisWorkbook.Sheets("KapaPlanung").Cells(6 + i, 11) = ThisWorkbook.Sheets(i).Cells(9, 6)
           For t = 9 To 1 Step -1
               For p = 1 To lngSheets
                   If ThisWorkbook.Sheets(p).Cells(12, 6).Value <> "" Then
                       ThisWorkbook.Sheets("KapaPlanung").Rows(t).Insert Shift:=xlDown
                       ThisWorkbook.Sheets("KapaPlanung").Cells(t + 1, 11).Value = ThisWorkbook.Sheets(p).Cells(12, 6).Value
                       t = t + 2
                   End If
                   If ThisWorkbook.Sheets(p).Cells(15, 6).Value <> "" Then
                       ThisWorkbook.Sheets("KapaPlanung").Rows(t).Insert Shift:=xlDown
                       ThisWorkbook.Sheets("KapaPlanung").Cells(t + 1, 11).Value = ThisWorkbook.Sheets(p).Cells(15, 6).Value
                       t = t + 3
                   End If
               Next p
           Next t
       Next i
    End Sub
  4. Schließe den VBA-Editor und gehe zurück zu Excel.

  5. Führe das Makro aus. Du kannst dies über Entwicklertools > Makros tun und das Makro KapaPlanungAktualisieren auswählen.


Häufige Fehler und Lösungen

  • Fehler: "Fehler beim Kompilieren: If-Block ohne End If"
    Lösung: Überprüfe, ob alle If-Anweisungen mit einem entsprechenden End If abgeschlossen sind.

  • Fehler: Zeilen werden nicht korrekt eingefügt
    Lösung: Stelle sicher, dass der Zellbezug für das Einfügen der Zeile korrekt ist. Beispiel: ThisWorkbook.Sheets("KapaPlanung").Rows(t).Insert Shift:=xlDown.

  • Fehler: Makro rechnet sich zu Tode
    Lösung: Achte darauf, dass deine Schleifenbedingungen korrekt gesetzt sind, um endlose Schleifen zu vermeiden.


Alternative Methoden

Eine andere Möglichkeit, Zeilen einzufügen, besteht darin, die Worksheet.Change-Ereignisprozedur zu verwenden. Dies ermöglicht es dir, automatisch eine neue Zeile einzufügen, sobald eine Zelle ausgefüllt wird. Hier ist ein Beispiel:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Me.Range("F12:F15")) Is Nothing Then
        If Target.Value <> "" Then
            Rows(Target.Row).Insert Shift:=xlDown
        End If
    End If
End Sub

Diese Methode ist nützlich, wenn du dynamisch auf Änderungen in den Zellen reagieren möchtest.


Praktische Beispiele

  • Beispiel 1: Eine Zeile wird eingefügt, wenn die Zelle F12 gefüllt ist. Die Zelle F9 wird in die neue Zeile kopiert.
  • Beispiel 2: Wenn sowohl F12 als auch F15 gefüllt sind, werden zwei neue Zeilen eingefügt, eine für jede gefüllte Zelle.

Diese Beispiele können direkt in das oben genannte Makro integriert werden, um die gewünschten Ergebnisse zu erzielen.


Tipps für Profis

  • Verwende Option Explicit am Anfang deines Moduls, um sicherzustellen, dass alle Variablen deklariert sind. Dies hilft, Fehler zu vermeiden.
  • Füge Kommentare in deinen Code ein, um die Logik hinter deinen Schritten zu erklären. Dies erleichtert die Wartung des Codes.
  • Wenn du häufig mit Daten arbeitest, die in Zellen gefüllt sind, überlege, ob du eine Ereignisprozedur verwenden möchtest, um automatisch zu reagieren, wenn Zellen geändert werden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das Makro nur auf dem ersten Blatt arbeitet?
Das Makro ist so konzipiert, dass es nur auf dem "KapaPlanung"-Blatt arbeitet. Stelle sicher, dass die Zellen auf diesem Blatt korrekt referenziert werden.

2. Was mache ich, wenn ich eine Fehlermeldung beim Ausführen des Makros erhalte?
Überprüfe deinen Code auf Schreibfehler oder fehlende Anweisungen und stelle sicher, dass alle Referenzen zu den Zellen korrekt sind.

3. Kann ich das Makro anpassen, um mehr als zwei Zellen zu überprüfen?
Ja, du kannst zusätzliche If-Anweisungen hinzufügen, um weitere Zellen zu überprüfen und entsprechend neue Zeilen einzufügen.

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