Zeile einfügen wenn Zelle gefüllt

Bild

Betrifft: Zeile einfügen wenn Zelle gefüllt
von: ronforum
Geschrieben am: 29.07.2015 12:44:36

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

Bild

Betrifft: Ansatz
von: Frank
Geschrieben am: 30.07.2015 18:47:06
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

Bild

Betrifft: AW: Zeile einfügen wenn Zelle gefüllt
von: team11team
Geschrieben am: 03.08.2015 16:08:33
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

Bild

Betrifft: AW: Zeile einfügen wenn Zelle gefüllt
von: Frank
Geschrieben am: 03.08.2015 16:37:46
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

Bild

Betrifft: AW: Zeile einfügen wenn Zelle gefüllt
von: ronforum
Geschrieben am: 04.08.2015 14:47:20
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

Bild

Betrifft: AW: Zeile einfügen wenn Zelle gefüllt
von: EtoPHG
Geschrieben am: 04.08.2015 15:01:50
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

Bild

Betrifft: AW: Zeile einfügen wenn Zelle gefüllt
von: ronforum
Geschrieben am: 04.08.2015 15:25:14
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

Bild

Betrifft: Kraut und Rüben
von: Frank
Geschrieben am: 04.08.2015 16:23:00
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

Bild

Betrifft: AW: Kraut und Rüben
von: ronforum
Geschrieben am: 04.08.2015 17:32:28
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

Bild

Betrifft: Aufräumarbeiten
von: Frank
Geschrieben am: 05.08.2015 15:31:22
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

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zeile einfügen wenn Zelle gefüllt"