geosulf
Goto Top

Zeilen in Excel einfügen wenn eine Bedingung erfüllt ist

Hallo

ich möchte ein Problem in Excel lösen

habe ein zwei Tägiges Seminar Excel VBA Einsteiger besucht und nun sind noch viel mehr Fragen offen als ich dachte!

Problem

Excel2007

ich möchte in bestehen den Excel Tabellen Zeilen einfügen

wenn folgende Bedingung erfüllt ist ( Übersichtlichkeit)

in den Tabellen sind immer wieder Zellen einer Spalte mit gleichen Werten gefüllt (z.B. 15645645456)

das kann 1- x mal vorkommen und die Leer Zeile soll immer nach der Letzten Fundstelle eingefügt werden


bin das Wochenende leider daran verzweifelt!

Mit freundlichen Grüßen

Ulf

5504d1959d73d95657e7bd599ab902a9

die Spallte Z ist die die ich bearbeiten möchte

immer wenn in dieser Spalte ein Wert mehr als einmal auftritt soll unter der letzten Fundstelle eine leer Zeile eingefügt werden

dann müsste das einlesen weitergehen um bei der nächsten Fundstelle wieder eine Zeile einfügen werden

bis das Ende dieser Spalte erreicht wird es gibt ca 1900 Zeilen die eingelesen werden müssen!

ich denke das meine Lösungsversuche immer an der Problematik enden das ich es nicht hinbekommen

wie erreiche ich es das ich den Zellenwert merke nach weiteren suche ( das gute sie kommen immer hintereinander)

die Leerzeile einzufügen und dann ab der Fundstelle weitermache!

Ich werde heute Abend dies mit meinen Versuchen noch ergänzen!

Ulf

Content-Key: 252473

Url: https://administrator.de/contentid/252473

Printed on: April 19, 2024 at 16:04 o'clock

Mitglied: 114757
114757 Oct 20, 2014 updated at 09:22:03 (UTC)
Goto Top
Hallo,
bißchen wenig Info findest du nicht ? Nutze die Fomatierungsoptionen des Forums um uns wenigstens ein Beispiel deiner Tabelle zu zeigen, damit wir besser verstehen was du exakt meinst. Hier kommt es wie immer auf Kleinigkeiten an!

Gruß
jodel32
Member: Roadrunner0815
Roadrunner0815 Oct 20, 2014 at 09:31:00 (UTC)
Goto Top
Also ich würde dein Probem mit VBA versuchen zu lösen. Anfangen könnte man folgendermaßen:
- VBA-Aufzeichnung starten
- Stelle mit Dopplung manuell suchen
- von Hand die beiden Zeilen einfügen
- Aufzeichnung beenden

Damit hast du dann schon ein kleines Unterprogramm, welches genau deine Funktionalität erfüllt. Im zweiten Schritt, aber da müsste ich auch erst mal nachschauen, baust du dir eine Routine, die die doppelten Zeilen sucht und wenn sie die gefunden hat, das obige Unterprogramm aufruft.

Ist sicher nicht die eleganteste Lösung, müsste aber funktionieren...
Member: colinardo
colinardo Oct 20, 2014 updated at 10:47:55 (UTC)
Goto Top
Hallo Ulf, Willkommen auf Administrator.de!
das könntest du folgendermaßen machen: find_duplicates_insert_rows_252473.xlsm
Sub InsertRowsAfterDuplicates()
    Dim ws As Worksheet, rngCurrent As Range, cnt as integer, lastValue as String
    Set ws = Sheets(1)
    Set rngCurrent = ws.Range("Z1")  
    lastValue = ""  
    cnt = 0
    While rngCurrent.Value <> ""  
        If lastValue = rngCurrent.Value Then
            cnt = cnt + 1
            lastValue = rngCurrent.Value
            Set rngCurrent = rngCurrent.Offset(1, 0)
        Else
            If cnt >= 2 Then
                rngCurrent.EntireRow.Insert
                rngCurrent.EntireRow.Insert
                lastValue = rngCurrent.Value
                Set rngCurrent = rngCurrent.Offset(1, 0)
            Else
                lastValue = rngCurrent.Value    
            End If
            cnt = 0
        End If
    Wend
End Sub
Grüße Uwe
Mitglied: 116301
Solution 116301 Oct 20, 2014, updated at Oct 21, 2014 at 06:43:22 (UTC)
Goto Top
Hallo zusammen!

Andere Möglichkeit:
Sub Test()
    Dim oFound As Range, i As Long
    
    With Sheets("Tabelle1")  
        For i = .UsedRange.Rows.Count To 1 Step -1
            If .Cells(i, "Z").Text <> "" Then  
                Set oFound = .Columns("Z:Z").Find(.Cells(i, "Z").Text, .Cells(i, "Z"), xlValues, xlWhole)  
                
                If Not oFound Is Nothing Then
                    If oFound.Row < i Then
                        .Rows(i + 1).Insert Shift:=xlDown:  i = oFound.Row
                    End If
                End If
            End If
        Next
    End With
End Sub
Grüße Dieter

[edit] Korrektur, sodass es mit/ohne Überschriftzeile funktioniert [/edit]
Member: geosulf
geosulf Oct 20, 2014 updated at 15:33:33 (UTC)
Goto Top
Hallo Dieter

Danke für diesen Quell Text!!!!

Vom Ansatz war ich wenn ich das so sehe vollkommen auf einer falschen Spur!

ich hatte ausgehen von einem VB Script das gleiche Bereiche Farblich markiert Versucht dies so umzubauen das es Leerzeilen erzeugt!

Da ich die Original Tabelle nicht zur Hand habe (bin ja an der Arbeit) habe ich mir eine zum Testen gemacht

und bin in die Falle gelaufen , meine Testtabelle hatte ich so gemacht das ich keine Spaltenüberschriften in der ersten Zeile hatte und so mit funktionierte dein Script wunderbar bis es am Ende bzw an der Zeile 1 angekommen war , (Endlosschleife) zum Glück funktioniert ja STRG _ Pause!

kann nur Danke sagen für die Hilfe ohne das ich auch nur meine Versuche (Schäm) hier gezeigt habe !!

Werde mal schauen ob ich an anderer Stelle nicht gerade beim Thema VB nützliches beitragen kann!!


Zitat von @116301:

Hallo zusammen!

Andere Möglichkeit:
> Sub Test()
>     Dim oFound As Range, i As Long
>     
>     With Sheets("Tabelle1")  
>         For i = .UsedRange.Rows.Count To 1 Step -1
>             If .Cells(i, "Z").Text <> "" Then  
>                 Set oFound = .Columns("Z:Z").Find(.Cells(i, "Z").Text, LookIn:=xlValues, LookAt:=xlWhole)  
>                 
>                 If Not oFound Is Nothing Then
>                     If oFound.Row <> i Then
>                         .Rows(i + 1).Insert Shift:=xlDown:  i = oFound.Row
>                     End If
>                 End If
>             End If
>         Next
>     End With
> End Sub
> 
Grüße Dieter
Mitglied: 116301
Solution 116301 Oct 21, 2014, updated at Oct 22, 2014 at 12:07:35 (UTC)
Goto Top
Hallo geosulf!

Sorry, hatte nur mit Überschriftzeile getestetface-sad

Hab's oben korrigiert und sollte jetzt auch ohne Überschriftzeile funktionieren...

Grüße Dieter
Member: geosulf
geosulf Oct 22, 2014 updated at 12:48:08 (UTC)
Goto Top
Hallo Dieter

Danke für die zusätzlichen Informationen!

Habe nun auch das Original bearbeitet und bei 1930 Zeilen festgestellt das es in dieser Tabelle in der Spalte (Z) leere Zellen gibt! ( es können mal bis zu 5 leere Zellen werden)


meine Idee die Prüfung auf ein leeres Feld müsste so ergänzt werden das wenn diese Zelle Zx leer ist geprüft wird ob rechts oder Links nur leere Zellen sind!

wenn das so ist ist das Ende der Tabelle erreicht!

Ist das zu kompliziert gedacht ? Kann man dies über haupt im Code unterbringen?

Mit freundlichen Grüßen

Ulf


Zitat von @116301:

Hallo geosulf!

Sorry, hatte nur mit Überschriftzeile getestetface-sad

Hab's oben korrigiert und sollte jetzt auch ohne Überschriftzeile funktionieren...

Grüße Dieter
Mitglied: 116301
116301 Oct 23, 2014 at 09:42:09 (UTC)
Goto Top
Hallo geosulf!

Mal abgesehen davon, dass ich den Sinn nicht ganz verstehe (Zwischenleerräume Tabellenende?), ist mein Code dazu eh nicht geeignet, da die Zeilen ja von unten nach oben abgearbeitet werdenface-wink

Grüße Dieter