Office: VBA Löschen von Zellen mit Inhalt

Helfe beim Thema VBA Löschen von Zellen mit Inhalt in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Guten Morgen, ich habe ein folgendes Problem. Habe schon in mehreren Foren über mein Problem gesucht, aber nichts passendes gefunden. Ich habe... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von SpringJetzt, 19. Januar 2010.

  1. SpringJetzt Erfahrener User

    VBA Löschen von Zellen mit Inhalt


    Guten Morgen,

    ich habe ein folgendes Problem. Habe schon in mehreren Foren über mein Problem gesucht, aber nichts passendes gefunden.

    Ich habe eine Spalte "j" ab "9" in der mit Hilfe eines Macro die Zeilen gelöscht werden, in dem sich ein DATUM befindet. Das heißt, in denen noch kein Datum steht, die sollen nicht gelöscht werden.

    Die sind komplett leer (Spalte J). Ohne Formel Code oder sonst was. Und wenn ein Datum stehen drinne sollte, wird dieser manuell angetippt.

    Mit Hilfe des Macrorecorders habe ich das auch nicht geschafft.

    Danke im voraus.

    Grüße
     
    SpringJetzt, 19. Januar 2010
    #1
  2. Hajo_Zi
    Hajo_Zi Erfahrener User
    Du hast ein Makro, nur wir sehen das nicht.

     
    Hajo_Zi, 19. Januar 2010
    #2
  3. SpringJetzt Erfahrener User
    Ah falsch formuliert. Genau so ein Macro will ich das in Spalte j ab zeile 9 die Zeilen komplettlöscht, wenn sich darin ein Datum befindet.
     
    SpringJetzt, 19. Januar 2010
    #3
  4. Hajo_Zi
    Hajo_Zi Erfahrener User

    VBA Löschen von Zellen mit Inhalt

    löschen wenn Spalte A kein Datum enthält
    folgender Vorschlag (die Spalte A wird auf Datumsinhalte überprüft):
    For i = Cells(Rows.Count, 1).End(xlUp).Row To 1 Step -1
    If Not IsDate(Cells(i, 1).Text) Then Rows(i).Delete
    Next

    Sub löschen()
    ‘ mit bestimmten Datum löschen
    Dim I As Long
    Dim Letzte As Long
    If [a65536] = "" Then
    Letzte = [a65536].End(xlUp).Row
    Else
    Letzte = 65536
    End If
    On Error Resume Next
    For I = Letzte To 1 Step -1
    If IsDate(Cells(I, 1)) Then
    If CDate(Cells(I, 1)) = CDate("23.12.89") Then Rows(I).Delete
    End If
    Next
    End Sub
    Oder 1
    Sub löschen()
    Dim I As Long
    Dim Letzte As Long
    Letzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    On Error Resume Next
    For I = Letzte To 1 Step -1
    If Cells(I, 2) = "" Then Rows(I).Delete
    Next
    End Sub
    Das Suchen von hinten hat den Grund, daß schon einmal angesprochene Zeilennummern nicht wieder untersucht werden. Wenn du z.B. die Zeile 17 gelöscht hast, ist die ursprüngliche Zeile 18 jetzt die Zeile 17, die wird aber nicht noch einmal überprüft, usw.
     
    Hajo_Zi, 19. Januar 2010
    #4
  5. SpringJetzt Erfahrener User
    Ist das jetzt ein komplettes Macro?

    Weil das letzte löscht mir wirklich alles und das erste bewirkt irgendwie nichts.
     
    SpringJetzt, 19. Januar 2010
    #5
  6. Hajo_Zi
    Hajo_Zi Erfahrener User
    das sind komplette Makro.
    Das erste löscht wenn in Spalte A das Datum 23.12.89 steht.
    Das 2wenn Spalte B leer.
     
    Hajo_Zi, 19. Januar 2010
    #6
  7. SpringJetzt Erfahrener User
    Und wie muss ich das jetzt ändern, dass er ab Spalte "J" und erst ab Zeile 11 überprüft und löscht, wenn Inhalt in derZeile ist?
     
    SpringJetzt, 20. Januar 2010
    #7
  8. Hajo_Zi
    Hajo_Zi Erfahrener User

    VBA Löschen von Zellen mit Inhalt

    spalte A =1 Spalte J=10
    If IsDate(Cells(I, 1)) Then
    For I = Letzte To 1 Step -1
    To 1 mache es bis Zeile 1
     
    Hajo_Zi, 20. Januar 2010
    #8
  9. SpringJetzt Erfahrener User
    So langsam werde ich immer verwirrter. :-?
     
    SpringJetzt, 20. Januar 2010
    #9
  10. Hajo_Zi
    Hajo_Zi Erfahrener User
    dann sollten wir die Disskussion beenden.
     
    Hajo_Zi, 20. Januar 2010
    #10
  11. Hallo ich habe folgendes Problem und hoffe mir kann jemand helfen. Ich möchte in der erste Zeile alle Spalten löschen die kein Datum enthalten und habe versucht das Makro von oben abzuändern (leider mit wenig Erfolg)


    For i = Cells(1, Columns.Count).End(xlToLeft).Columns To 2 Step -1
    If Not IsDate(Cells(1, i).Text) Then Columns(i).Delete
    Next


    in der Zeile "If Not " bringt er mir "Awendungs und objektdefinerter Fehler"

    ich bin für jeden Tipp Dankbar
     
    Christian_S, 5. August 2011
    #11
  12. miriki Erfahrener User
    Das glaube ich gerne... Aber nochmal zum Klaren Verständnis:

    Der "manuelle" Ablauf wäre wie folgt:
    a) Cursor in Zelle J9 platzieren
    b) gucken, ob ein Datum in der Zelle steht
    c) wenn ja: komplette Zeile(!?) löschen
    d) wenn nein: Cursor eine Zeile tiefer setzen und weiter bei b)

    Und wann soll diese Schleife beendet werden? Ok, im Zweifelsfall am Blatt-Ende von Excel (z.B. in Zeile 65536). Gibt's ein anderes Abbruch-Kriterium? Das Makro kann ggf. auch selbst das Ende der Liste bestimmen (z.B. von Zelle J65536 aus nach oben gucken, welche Zelle in Spalte J die letzte beschriebene ist).

    Absolutes Trockenschwimmen, weil ich das jetzt nicht mit Daten nachgebildet habe, aber so könnte es funktionieren:
    Code:
    Option Explicit
    
    Public Sub Datumszeilen_loeschen()
    
        Dim y As Long
        Dim x As Long
    
        y = 9 'Zeile 9
        x = 10 'Spalte 10 = J
    
        ymax = Cells(65536, x).End(xlUp).Row 'letzte Zeile in der Liste
    
        While (y <= ymax) 'bis Listen-Ende
    
            If IsDate(Cells(y, x)) Then 'wenn Datum...
                Rows(y).Delete shift:=xlShiftUp 'Zeile löschen
                ymax = ymax - 1 'Listen-Ende reduzieren
              Else 'wenn nicht Datum...
                y = y + 1 'nächste Zeile
            End If
    
        Wend
    
    End Sub
    (Den Code in ein neues Modul einfügen, dann ist das Makro über "Extras - Makro - Makros..." verfügbar.)

    Gruß, Michael
     
  13. miriki Erfahrener User

    VBA Löschen von Zellen mit Inhalt

    So ganz kann diese Schleife auch nicht funktionieren. Das Problem ist nämlich, daß der Schleifenzähler stur hochzählt, auch wenn eine Spalte gelöscht wurde. Beispiel:

    Code:
    for i=1 to 10
    Zählt in jedem Fall von 1 an bis 10 hoch. Und jetzt stellt dein Code fest, daß Spalte 6 gelöscht werden soll.
    Was passiert dann? Der nächste Durchlauf überprüft Spalte 7. Klingt erstmal ganz ok, aber...
    Durch das Löschen von Spalte 6 ist die vorherige Spalte 7 zur neuen Spalte 6 geworden. Es wird also genau genommen Spalte 8 überprüft, die jetzt die neue Spalte 7 ist.
    Ungeachtet dessen läuft die Schleife aber auf 7 weiter. Die aufgerückte 7, jetzt 6, wird nicht mehr überprüft.
    Was eventuell noch viel fataler ist: In Durchgang 10 wird, natürlich, Spalte 10 überprüft. Vor dem Löschen war das aber Spalte 11 und hätte vielleicht gar nicht mit betrachtet werden sollen. Jetzt wird womöglich etwas gelöscht, was gar nicht gelöscht werden sollte...

    Bei Schleifen mit .delete Operationen ist es zwingend notwendig, mit einem selbst geführten Zähler und einer Ende-Markierung z.B. per WHILE..WEND zu arbeiten.
    nicht löschen - Zähler erhöhen, Ende-Markierung beibehalten
    löschen - Zähler nicht erhöhen, Ende-Markierung reduzieren

    Gruß, Michael
     
  14. Hallo Michael,
    danke für die schnelle Antwort das Problem habe ich verstanden. Leider habe ich aber noch nie mit While-Schleifen gearbeitet und meine Versuche eben endeten nicht sehr erfolgreich.

    j = 1
    While j <> 8

    For i = Cells(1, j).Columns To 2
    If Not IsDate(Cells(1, j).Text) Then Columns(i).Delete
    j = j + 1
    Next
    Wend

    ich dachte so könnte es funktionieren aber leider klappt es nicht.
    Mein Problem:
    In meiner Datei steht an erster stelle immer eine Artikelnummer gefolgt von 6 Datumsangaben, jetzt kann es aber vorkommen das in der zweiten Spalte die Bezeichnung zum Artikel steht und die will ich dann ggf weg bekommen.

    noch eine Frage: Warum funktioniert das Makro auf Zeilenbasis und verasgt aber auf Spaltenbasis? Im Zeilen-Makro scheint es Excel (den Zähler) nicht zu stören wenn eine Zeile gelöscht wird

    Danke schon mal im Vorraus Christian
     
    Christian_S, 5. August 2011
    #14
  15. miriki Erfahrener User
    Nach nochmaligem Lesen fiel mir auf, daß ich eigentlich einen Fehlalarm ausgelöst habe. Wenn die Schleife, wie Du sie gepostet hast, "rückwärts" läuft, stellt sich das von mir beschriebene Problem nicht. Na gut, aber trotzdem...

    Aus meiner Antwort an SpringJetzt könntest Du den Code fast 1:1 übernehmen. Der Kern besteht aus:
    Code:
        y = 9
        x = 10
    
        ymax = Cells(65536, x).End(xlUp).Row
    
        While (y <= ymax)
    
            If IsDate(Cells(y, x)) Then
                Rows(y).Delete shift:=xlShiftUp
                ymax = ymax - 1
              Else 'wenn nicht Datum... 
                y = y + 1
            End If
    
        Wend
    Und Du mußt jetzt anpassen:
    a) Start-Zelle
    Code:
        y = 1
        x = 1
    b) End-Zelle
    Code:
        xmax = Cells(y, 256).End(xlLeft).Column
    c) Laufrichtung
    Code:
        While (x <= xmax)
    
            If (Not IsDate(Cells(y, x))) Then
                Columns(x).Delete shift:=xlShiftLeft
                xmax = xmax - 1
              Else
                x = x + 1
            End If
    
        Wend
    So müßte es eigentlich gehen. Aber auch hier: Da ich keine Spieldaten habe, ist das reines Trockenschwimmen...

    Gruß, Michael
     
Thema:

VBA Löschen von Zellen mit Inhalt

Die Seite wird geladen...
  1. VBA Löschen von Zellen mit Inhalt - Similar Threads - VBA Löschen Zellen

  2. VBA - Zeilen je nach Bedingung in neues Tabellenblatt verschieben und löschen

    in Microsoft Excel Hilfe
    VBA - Zeilen je nach Bedingung in neues Tabellenblatt verschieben und löschen: Hallo liebe Excel-Kommunity, nach ewigen Stunden des Suchens und Rumprobierens bin ich an dem Punkt angekommen an dem ich verzweifelt um eure Hilfe fragen muss. Da ich leider keinerlei...
  3. Excel mit VBA ganze Zeile nach einem Wert in Zelle löschen

    in Microsoft Excel Hilfe
    Excel mit VBA ganze Zeile nach einem Wert in Zelle löschen: Hallo zusammen Mein Kopf ist kurz vorm Explodieren. Hoffe auf eure Hilfe: Ich versuche mit einem Makro anhand des Wertes der in Zelle G1 steht, alle Zeilen mit diesem Wert in der Tabelle zu...
  4. Komischer Zahlen in der GUI + VBA bestimmte Zellen mit gewissen Inhalt nicht löschen

    in Microsoft Excel Hilfe
    Komischer Zahlen in der GUI + VBA bestimmte Zellen mit gewissen Inhalt nicht löschen: Hallo, ich bin neu hier im Forum, also bitte ich um Verständnis, wenn dies hier nicht der richtige Platz für dieses Thema ist. Ich habe 2 Anliegen. Auf dem ersten Bild könnt ihr die besagten...
  5. Wenn Nein dann Zellen löschen VBA

    in Microsoft Excel Hilfe
    Wenn Nein dann Zellen löschen VBA: Hallo, ich suche jetzt schon ziemlich lange nach einer Lösung für ein vermeintlich einfaches Problem. Ich möchte dass VBA die Dropdownmenüs auf 0 setzt wenn in einer anderen Zelle der Wert Nein...
  6. Bilder aus einzelnen Zellen mittels VBA löschen

    in Microsoft Excel Hilfe
    Bilder aus einzelnen Zellen mittels VBA löschen: Hallo zusammen, gibt es eine Möglichkeit nur Bilder aus bestimmten Zellen eines Tabellenblattes mittels eines VBA Codes zu löschen? Bis jetzt hab ich nur Worksheets("").DrawingObjects.Delete...
  7. Mehrere Zellen per vba löschen

    in Microsoft Excel Hilfe
    Mehrere Zellen per vba löschen: Hallo Forum, wer kann mir da auch die schnelle weiterhelfen. Hab in einem Tabellen verschieden Zellen, die ich nach kopieren des Blattes löschen möchte. Habs mal so versucht, aber leider mir...
  8. VBA/ Makro Zelle löschen

    in Microsoft Excel Hilfe
    VBA/ Makro Zelle löschen: Hallo, das letzte mal mit VBA habe ich im der Schulzeit gearbeitet und das is nun 10 Jahre her. Vlt könnt Ihr mir bei meiner (ich denke mal einfachen) Frage helfen. Folgende Tabelle ist...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden