Microsoft Excel

Herbers Excel/VBA-Archiv

Nur Bestimmte Zellen löschen

Betrifft: Nur Bestimmte Zellen löschen von: AliBaba
Geschrieben am: 27.10.2020 11:51:51

Hallo VBA Freunde,


ich habe ein Problem mit dem Löschen bestimmte Zellen einer Tabelle (Zellen von Spalte L bis R), wenn im Zelle von Spalte M den Wert Null hat.


Mein Vorgehen ist wie folgt:

1. ich kopiere die Spalten C:I

2. Dann füge ich sie ganz normal in Spalte L:R (damit ich die Formate der Zellen übernehme)

3. Danach füge ich die kopierte Zellen nochmals in Spalten L:R aber jetzt nur die Werte

4. Nachdem die Spalten eingefügt sind, sortiere ich die Spalten nach der Reihe nach Zeitart (Spalte L) Datum (Spalte R) und zur Letzt Werker Saplte P).

Problem:

5. Soll in dieser List von R:R nur die Zellen gelöscht werden, die im Spalte M einen Wert von Null haben.

6. Wenn möglich dann sollen nur die vollen Zellen, ohne die gelöschten Zellen wie oben sortiert werden. (Wenn durch Löschen der Zellen leere Zellen angezeigt werden)


Hier Mein Code:

  • 
    Sub ZeitartenSortieren()
    '
    ' ZeitartenSortieren Makro
    ' Hier wird nach Zeitarten, Datum und Werker sortiert für die Zusammenstellungbogen. At, 27.10.  _
    _
    2020
    '
    
    '
        Columns("C:I").Select
        Selection.Copy
        Columns("L:L").Select
        ActiveSheet.Paste               ' Hier normales Einfügen mit Formate und Formeln usw.
        Columns("L:L").Select           ' Hier nur Werte einfügen ohne Formeln und Formate
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
            
          With Columns("L:R")
              .Sort Key1:=Range("L1"), Key2:=Range("R1") _
                  , Key3:=Range("P1"), Header:=xlYes
        ' Wenn mehr als drei Sortierkriterien nötig ist:
        '     .Sort Key1:=Range("J1"), Key1:=Range("K1") _
        '          , Key3:=Range("L1"), Header:=xlYes
          End With
            
        '     Ab hier würde ich gerne die Zellen L bis R löschen (nicht die komplette Zeile) , wenn  _
     _
    die Werte im Spalte M Null ist  !!!  
        '               Nice to Have ist, nachdem die gelöschten Zellen von L bis R die Zeile nach   _
    _
    oben verschoben.
        '               Aber wenn es zu schwer ist kann ich auch neu wie oben sortieren.
        '               Wie geht es ?
        '
        End Sub




  • Ich danke für Eure Hilfe

    LG

    AliBaba

    Betrifft: AW: Nur Bestimmte Zellen löschen
    von: Daniel
    Geschrieben am: 27.10.2020 12:41:55

    Hi

    vorausgesetzt, dass in der Spalte M nur Zahlen oder Texte stehen können, geht's so:

    ersetze in Spalte M die 0 durch einen Wahrheitswert
    markiere die die Spalte M und schränke die Auswahl auf die Wahrheitswerte ein (Inhalte - auswählen)
    erweitere diese Zellenn auf "ganze Zeile", bilde die Schnittmenge mit den gewünschten Spalten und lösche.

    sieht als Code so aus:
    With Columns(13)
        If Worksheetfunction.Countif(.Cells, 0) > 0 Then
            .replace 0, True, xlwhole
            Intersect(.SpecialCells(xlcelltypeconstants, 4).EntireRow, Range("L:R")).Delete Shift:= _
    xlup
        end if
    end with
    wenn die Datenmenge sehr groß ist, dann solltest du Spalte M als Hauptkriterium ins Sortieren mit aufnehmen.
    Dann stehen alle Zeilen, die gelöscht werden sollen als geschlossener Block direkt untereinander und das beschleunigt das Löschen von Zeilen erheblich
    (Range("1:1000").delete dauert genauso lang die Range("1:1").delete, aber Range("1:1,3:3").delete dauert doppelt so lange).

    Gruß Daniel

    Betrifft: AW: Nur Bestimmte Zellen löschen
    von: AliBaba
    Geschrieben am: 27.10.2020 13:14:35

    Hallo Daniel,

    ich danke Dir für die schnelle und erfolgreiche Antwort. Es hat auf Anhieb funktioniert.

    Ich habe für dich eine simple Fragen:
    Bei dem "With Columns(13)" was bedeutet und welchen Funktion hat die Nummer 13 in der Klammer?

    Danke!

    LG
    AliBaba


    Betrifft: AW: Nur Bestimmte Zellen löschen
    von: Daniel
    Geschrieben am: 27.10.2020 13:23:18

    Hi
    Da "Columns" übersetzt "Spalten" heißt, steht die 13 hier für die 13. Spalte.
    in VBA kann in den Funktionen Columns und Cells auch anstelle des Spaltenbuchstabens auch die Spaltennummer angeben, was für die Programmierung oft einfacher ist, zumindest dann wenn die Werte noch irgendie berechnet werden.
    du kannst statt Columns(13) auch Columns("M:M") oder Range("M:M") schreiben, dein VBA versteht das auch.

    Gruß Daniel

    Beiträge aus dem Excel-Forum zum Thema "Nur Bestimmte Zellen löschen"