1. Liebe Forumsgemeinde,

    aufgrund der Bestimmungen, die sich aus der DSGVO ergeben, müssten umfangreiche Anpassungen am Forum vorgenommen werden, die sich für uns nicht wirtschaftlich abbilden lassen. Daher haben wir uns entschlossen, das Forum in seiner aktuellen Form zu archivieren und online bereit zu stellen, jedoch keine Neuanmeldungen oder neuen Kommentare mehr zuzulassen. So ist sichergestellt, dass das gesammelte Wissen nicht verloren geht, und wir die Seite dennoch DSGVO-konform zur Verfügung stellen können.
    Dies wird in den nächsten Tagen umgesetzt.

    Ich danke allen, die sich in den letzten Jahren für Hilfesuchende und auch für das Forum selbst engagiert haben. Ich bin weiterhin für euch erreichbar unter tti(bei)pcwelt.de.
    Dismiss Notice

Makro Excel löschen von Zeilen bestimmter Inhalt

Discussion in 'Office-Programme' started by slimer, Sep 9, 2007.

Thread Status:
Not open for further replies.
  1. slimer

    slimer Byte

    Hallo all,

    ich habe folgendes Problem und hoffe jemand kann mir helfen.

    Ich habe mehrere listen in Excel.
    Spalten A-P
    Zeilen unterschiedlich viele.

    In Splate K steht unter anderem in manchen Zellen eine "0"
    Zudem gibt es in dieser Spalte Zellen die mit 25%-grau Hintergrund formatiert sind.

    Ich benötige ein Makro das mir alle Zeilen löscht, in denen unter Spalte K eine Zelle vorkommt in der eine 0 steht und die keine Hintergrundformatierungseigenschaft hat.
    Sprich, alle Zeilen wo in Spalte K eine 0 haben und 25% grau sind sollen nicht gelöscht werden.

    gruß
    slimer
     
  2. Hascheff

    Hascheff Moderator

    Hallo slimer,
    gibt es zwischen den zu löschenden Zeilen auch welche, in denen Spalte K leer ist? Ist der graue Hintergrund durch bedingte Formatierung entstanden oder echt grau als Zelleigenschaft?
     
  3. slimer

    slimer Byte

    Guten Morgen Hascheff,

    es gibt auch zeilen, in denen Spalte K leer ist - gut, dass du danach fragst, die möchte ich nämlich auch löschen.

    Der graue Zellenhintergrund ist eine Zelleneigenschaft - also über das "Eimersymbol" Füllfarbe.

    Gruß und Danke
    Slimer
     
  4. brum

    brum Kbyte

    Hallo Slimer

    Ich habe da mal ein Makro erstellt:

    Code:
      vonZeile = 2 ' die erste Zeile
      bisZeile = 65536 ' letzte Zeile
      Spalte = 11 ' Spalte K
      For Zeile = bisZeile To vonZeile Step -1
        If IsEmpty(Cells(Zeile, Spalte)) = True Or (Cells(Zeile, Spalte).Value = 0 And Cells(Zeile, Spalte).Interior.ColorIndex = xlColorIndexNone) Then
            Rows(Zeile).Delete Shift:=xlUp
        End If
      Next Zeile
    
    Kurze Erläuterung: Mein Makro fängt unten an, weil beim Löschen die Zeile verschwindet. Es werden die Zeilen gelöscht, bei denen die Spalte K leer ist (egal ob farbig). Und es werden die Zeilen gelöscht, die eine 0 haben und keine Füllfarbe haben.

    Wichtig: die vonZeile und die bisZeile anpassen. (Sonst kannst Du mal eine Zeit lang die Daumen drehen. ;-) )

    Gruss
    Bruno
     
  5. slimer

    slimer Byte

    Hallo Brum,

    dein Makro ist spitze.
    Vielen Dank! :)

    Allerdings hätte ich zwei Vorschläge zur Verbesserung - allerdings weiß ich nicht, ob sich diese umsetzten lassen?

    1. Kann man das Makro so verbessern, dass es selbständig erkennt was die letzte beschriebene Zeile ist?

    2. Kann man anstatt alle Zeilen einzeln zu löschen, das Makro so verbessern, dass es erst alle entsprechenden Zeilen markiert und dann alle auf einmal löscht. Dann würde das ganze schneller ablaufen - denke ich!?


    grüßle
    slimer
     
  6. brum

    brum Kbyte

    Immer diese Sonderwünsche... ;-)

    1. Da es in dieser Spalte leere Zellen hat, können wir das mit dieser Spalte nicht machen. Wir brauchen eine Spalte, die in jeder Zeile ein Wert hat. Dann kannst Du es wie folgt machen (bei mir Spalte 1):

    Code:
      bisZeile = Cells(vonZeile, 1).End(xlDown).Row
    
    2. Ist ein bisschen schwieriger. Hab zwar nicht herausgefunden, wie man einer bestehenden Markierung einen weiteren Teil hinzufügt... Hier meine Lösung (ist zwar wieder ohne Markierung aber könnte einfach geändert werden).

    Die Zeilen werden nun alle zusammen gelöscht:

    Code:
      vonZeile = 2 ' die erste Zeile
      'bisZeile = 65536 ' letzte Zeile
      bisZeile = Cells(vonZeile, 11).End(xlDown).Row
      Spalte = 11 ' Spalte K
      For Zeile = bisZeile To vonZeile Step -1
        If IsEmpty(Cells(Zeile, Spalte)) = True Or (Cells(Zeile, Spalte).Value = 0 And Cells(Zeile, Spalte).Interior.ColorIndex = xlColorIndexNone) Then
          If Zeilen > "" Then
            Zeilen = Zeilen + ","
          End If
          Zeilen = Zeilen + Trim$(Str$(Zeile)) + ":" + Trim$(Str$(Zeile))
        End If
      Next Zeile
      If Zeilen > "" Then Range(Zeilen).Delete Shift:=xlUp
    
    Gruss
    Bruno
     
  7. slimer

    slimer Byte

    Danke, dass du meinen Sonderwunsch erfüllt hast :)

    Funktioniert wunderbar :)

    Grüßle
    slimer
     
  8. Beverly

    Beverly Halbes Megabyte

    Hi miteinander,

    es gibt noch eine andere Möglichkeit zum Ermitteln der letzten belegten Zeile, wenn man nicht weiß, ob alle Zellen in der Suchspalte bis zur letzten ausgefüllt sind - die letzte belegte Zeile des benutzten Bereichs

    Code:
    ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    Man muss dabei nur folgendes beachten: trägt man in eine Zelle unterhalb des bisherigen benutzten Bereichs etwas ein und löscht es dann wieder, muss man immer die gesamte Zeile löschen (und nicht nur den Inhalt der Zelle entfernen) und anschließend die Arbeitsmappe speichern. Das hängt damit zusammen, dass Excel, sobald in eine Zelle ein Eintrag erfolgt, dort unsichtbare Steuerzeichen hinterlegt und damit gehört die Zelle dann zum benutzten Bereich.
     
  9. slimer

    slimer Byte

    super, dankeschön
     
  10. Hascheff

    Hascheff Moderator

    Hallo,
    Das sieht man auch am Rollbalken.

    Das erledigt ja das Makro mit.
    Wenn ich die Zeilen von Hand lösche, bleibt ja zunächst die Markierung der nachgerückten Zellen erhalten. Vor dem Speichern verlasse ich diesen Bereich. (Hab noch nicht probiert, ob das nötig ist, scheint mir logisch) Das erledigt das Makro automatisch.
     
  11. slimer

    slimer Byte

    Morgen Brum,

    ich habe heute ein Problem mit deinem Makro festgestellt. Also wenn ich es Debugge im Einzelschritt funktioniert es perfekt.

    Doch wenn ich es automatisch ablaufen lasse, alleine oder in verbindung mit anderen Makros....bringt es mir folgende Fehlermeldung:
    Laufzeitfehler:' 1004 '
    Die Methode 'Range' für das Objekt '_Global' ist fehlgeschlagen

    Ich hoffe du kannst mir weiterhelfen.


    Gruß
    slimer
     
  12. brum

    brum Kbyte

    Das Problem liegt darin, dass Excel maximal 45 Bereiche (Zeilen) auswählen kann.

    Vielleicht musst Du die Zeilen doch einzeln löschen... :-(

    Gruss
    Bruno
     
  13. brum

    brum Kbyte

    Ok, hab jetzt herausgefunden, wie man eine Markierung erweitert...

    Code:
      vonZeile = 2 ' die erste Zeile
      bisZeile = Cells(vonZeile, 11).End(xlDown).Row
      Spalte = 11 ' Spalte K
      Markierung = False
      For Zeile = bisZeile To vonZeile Step -1
        If IsEmpty(Cells(Zeile, Spalte)) = True Or (Cells(Zeile, Spalte).Value = 0 And Cells(Zeile, Spalte).Interior.ColorIndex = xlColorIndexNone) Then
          If Markierung Then
            Union(Selection, Rows(Zeile)).Select
          Else
            Rows(Zeile).Select
            Markierung = True
          End If
        End If
      Next Zeile
      If Markierung > "" Then Selection.Delete Shift:=xlUp
    
    Gruss
    Bruno
     
  14. Hascheff

    Hascheff Moderator

    @ brum:
    Beim Umstellen von Zeilen auf Markierung ist dir die letzte Code-Zeile entgangen:
    Code:
    If Markierung Then ...
    Das > "" muss weg. (oder kann weg? Es sollte weg.)

    BTW:
    Code:
    IsEmpty(Cells(Zeile, Spalte)) = True
    ist identisch mit
    Code:
    IsEmpty(Cells(Zeile, Spalte))
    Die erste Form ist nur weniger elegant.
     
  15. brum

    brum Kbyte

    @Hascheff: Hast schon recht!

    Hab's ja nur kurz zusammengebastelt.

    Gruss
    Bruno
     
  16. slimer

    slimer Byte

    Hey Jungs,:) :) :) :)

    vielen Dank für eure schnelle Hilfe.

    Das Makro läuft wie geschmiert.

    Gruß
    slimer
     
Thread Status:
Not open for further replies.

Share This Page