🚀The world's best VBA AI has evolved. ExcelMaster is now an autonomous Agent.Read more →
Back to Blog

VBA Clear in Excel — ClearContents vs Clear vs Delete und die Leerstring-Falle

|

VBA Clear in Excel — ClearContents vs Clear vs Delete und die Leerstring-Falle

TL;DR — Es gibt kein einzelnes „eine Zelle leeren". .ClearContents wischt Wert und Formel, behält aber die Formatierung — das, was Sie in neunzig Prozent der Fälle wollen. .Clear wischt alles, Formate und Rahmen eingeschlossen, nutzen Sie es also nur, um eine Zelle auf werksfrisch-leer zurückzusetzen. .ClearFormats wischt die Formatierung und behält die Werte. cell.Value = "" zu setzen ist nicht leer — es hinterlässt einen String der Länge null, den ISBLANK als nicht leer liest. Und .Clear ist nicht .Delete: Clear leert die Zelle an Ort und Stelle, Delete entfernt sie und verschiebt ihre Nachbarn.

Range("A2:Z1000").ClearContents   ' Daten weg, Vorlage (Rahmen/Farben/Formate) behalten
Range("A2:Z1000").Clear           ' ALLES weg - Sie bauen jetzt die Formatierung neu
Range("A2:Z1000").ClearFormats    ' Formatierung weg, Werte behalten

Range("A2").Value = ""            ' NICHT leer - ein leerer String; ISBLANK ist False
Range("A2").ClearContents         ' wirklich leer

Jeder lernt zuerst .ClearContents und fragt sich dann, warum .Clear „meine Rahmen gelöscht hat", warum eine „leere" Zelle immer noch ein COUNTA auslöst, oder warum das Leeren eines Range Formeln drei Spalten weiter kaputt machte. Alles stammt aus einer Idee, die festzuhalten sich lohnt: Eine Zelle ist ein Stapel unabhängiger Schichten, und Leeren heißt zu wählen, welche Schichten gewischt werden. Nehmen Sie den Radierer, der zu der Schicht passt, die Sie meinen, und die Überraschungen verschwinden.

Was Sie lernen

  • Das mentale Modell — eine Zelle besteht aus Schichten, und Leeren wählt, welche Schichten gewischt werden
  • .ClearContents gegenüber .Clear gegenüber .ClearFormats
  • Warum cell.Value = "" ein Schein-Leer ist, und was eine Zelle wirklich leert
  • Warum .Clear und .Delete verschiedene Operationen sind, keine Synonyme
  • Ein ganzes Blatt oder einen UsedRange in einem einzigen schnellen Aufruf leeren

Das mentale Modell: eine Zelle besteht aus Schichten, Leeren wählt, welche

Eine Zelle ist nicht ein Ding. Sie hält einen Wert oder eine Formel, ein Zahlenformat, eine Schrift und Füllung, Rahmen, bedingte Formatierung, Gültigkeitsprüfung und Kommentare — unabhängige Schichten, gestapelt in derselben Zelle. Es gibt keine Methode namens „clear"; es gibt eine Familie von Methoden, deren jede eine gewählte Teilmenge entfernt:

Range("A1").ClearContents   ' entfernt: Wert/Formel        behaelt: alles andere
Range("A1").ClearFormats    ' entfernt: Zahlenformat, Schrift, Fuellung, Rahmen   behaelt: Wert
Range("A1").Clear           ' entfernt: ALLES oben Genannte

Sobald Sie die Schichten sehen, lesen sich die Methodennamen als genau das, was sie tun. Die Frage ist nie „wie leere ich diese Zelle" — sie ist „welche Schichten will ich weg", und die Antwort wählt die Methode.

ClearContents vs Clear vs ClearFormats

.ClearContents ist das Arbeitstier: die Daten wischen, die Vorlage behalten. Es entfernt Werte und Formeln und lässt Rahmen, Farben, Zahlenformate und Gültigkeitsprüfung intakt — was genau das bedeutet, was „die Zahlen vom letzten Monat löschen, damit ich die von diesem Monat eingeben kann" heißt:

Range("B2:B50").ClearContents   ' Zahlen weg, die formatierte Tabelle sieht immer noch wie eine Tabelle aus

.Clear ist der Vorschlaghammer: Es entfernt den Inhalt und jede Formatierungsschicht — Rahmen, Füllungen, bedingte Formatierung, Gültigkeitsprüfung, Kommentare. Das ist der häufigste versehentliche Schaden in VBA: zu .Clear zu greifen, um einen formatierten Range zu „leeren", und zu entdecken, dass die Rahmen und Farben, die Sie gebaut haben, auch weg sind.

Range("B2:B50").Clear           ' jetzt ist B2:B50 leer UND unformatiert - Zeit zum Neuaufbau

Nutzen Sie .Clear nur, wenn Sie wirklich „diese Zellen auf einen brandneuen, unformatierten Zustand zurücksetzen" meinen. .ClearFormats ist das gegenteilige chirurgische Werkzeug — Formatierung abziehen, die Werte behalten — und es hat gezielte Geschwister für eine einzelne Schicht: .ClearComments, .ClearHyperlinks, .ClearNotes, .ClearOutline. Wählen Sie die Schicht, wählen Sie die Methode.

Die Leerstring-Falle: ein Leerstring ist nicht dasselbe wie leer

Das ist die stille. Einen leeren String zuzuweisen leert eine Zelle nicht — es speichert einen String der Länge null, was ein Wert ist, nicht die Abwesenheit eines Werts:

Range("A1").Value = ""          ' A1 haelt jetzt einen STRING der Laenge null
' ISBLANK(A1) ist False; COUNTA zaehlt A1; IsEmpty(Range("A1")) ist False
Range("A1").ClearContents       ' A1 ist jetzt echt leer
' ISBLANK(A1) ist True; COUNTA ignoriert A1; IsEmpty(Range("A1")) ist True

Eine auf "" gesetzte Zelle sieht auf dem Bildschirm leer aus, verhält sich aber als gefüllt: COUNTA zählt sie, ISBLANK und IsEmpty melden sie als nicht leer, Range.End(xlUp) stoppt an ihr, und Diagramme und Pivot-Tabellen behandeln sie als Daten. Das erzeugt zum Wahnsinn treibende „die Zelle ist leer, aber Excel ist anderer Meinung"-Bugs. Um eine Zelle zu leeren, nutzen Sie .ClearContents (oder weisen Empty zu: Range("A1").Value = Empty), nie = "". Die Unterscheidung zwischen einer wirklich leeren Zelle und einem leeren String ist eines der nützlichsten Dinge, die man verinnerlichen sollte; siehe VBA Cell Value dazu, wie Werte zurückgelesen werden.

Clear ist nicht Delete: die Verschiebung, die Adressen bricht

.Clear und .Delete klingen wie Synonyme und sind es nicht. .Clear leert die Zelle, lässt sie aber, wo sie ist. .Delete entfernt die Zelle ganz und verschiebt ihre Nachbarn nach oben oder links, um das Loch zu füllen — also ändert sich jede Adresse unterhalb oder rechts der Löschung, und Formeln, die auf die verschobenen Zellen zeigen, können brechen oder #REF! zurückgeben.

Range("A5").ClearContents   ' A5 ist leer; A6, A7, ... bleiben, wo sie sind
Range("A5").Delete Shift:=xlUp   ' A5 ist WEG; A6 wird A5, A7 wird A6, Adressen verschieben sich

Ist Ihr Ziel „diese Zelle leer machen", ist es immer .ClearContents — nie .Delete. Greifen Sie nur dann zu .Delete, wenn Sie die Zelle, Zeile oder Spalte tatsächlich weg haben wollen und die Verschiebung der Sinn ist, etwa beim Entfernen leerer Zeilen. Zeilen sicher zu löschen (von unten nach oben schleifen, EntireRow nutzen) ist ein eigenes Thema; siehe VBA Delete Rows. Die beiden zu verwechseln ist der Weg, wie ein „Aufräum"-Makro still ein Blatt durcheinanderbringt.

Ein ganzes Blatt oder einen UsedRange in einem Aufruf leeren

Leeren ist eine Range-Operation, erledigen Sie es also in einem Aufruf, nicht in einer Zelle-für-Zelle-Schleife. Eine Schleife überquert bei jeder Zelle von VBA nach Excel und kriecht auf großen Ranges; ein Aufruf auf dem ganzen Range ist eine einzige Operation (dasselbe Roundtrip-Prinzip wie beim Lesen von Werten — siehe VBA Cell Value):

ws.UsedRange.ClearContents               ' alle Daten auf dem Blatt leeren, Formate behalten
ws.Cells.Clear                           ' das ganze Blatt wischen, Inhalt und Formate
Range("A2", Range("A2").End(xlDown)).ClearContents  ' eine Datenspalte unter einer Kopfzeile leeren

UsedRange und CurrentRegion zielen auf „alles mit Daten", ohne eine Range-Höhe hart zu verdrahten; siehe VBA UsedRange. Meine Faustregel: standardmäßig .ClearContents. .Clear ist ein Zurücksetzen-auf-Werk, kein Radierer; .Delete ist strukturelle Chirurgie, kein Radierer; = "" ist ein Schein-Leer-Bug. Neun von zehn Malen ist das Verb, das Sie wollen, .ClearContents, und das zehnte ist .ClearFormats.

Wie ExcelMaster hilft

Die Leer-Fehler, die echte Zeit kosten, sind stille: das .Clear, das die Rahmen der Vorlage mitnahm, das = ""-„Leer", das ein nachgelagertes COUNTA weiterzählte, das .Delete, das eine Spalte verschob und Formeln zwei Blätter weiter brach. Jeder tut etwas — nur nicht das, was Sie meinten.

ExcelMaster greift zu dem Radierer, der zu Ihrer Absicht passt. Bitten Sie es, „die Daten zu leeren, aber das Layout zu behalten", und es nutzt .ClearContents auf der UsedRange; bitten Sie es, „dieses Blatt vollständig zurückzusetzen", und es nutzt .Clear. Es leert Zellen mit .ClearContents statt mit = "", sodass Ihre Leerzellen wirklich leer sind, und es behält .Delete für den Fall, dass Sie tatsächlich Zeilen entfernen wollen — von unten nach oben erledigt, sodass nichts darunter verrutscht. Sie sagen, was weg soll; es wählt die Methode, die den Rest der Zelle intakt lässt.

Häufig gestellte Fragen

Was ist der Unterschied zwischen Clear und ClearContents in VBA?

.ClearContents entfernt nur die Werte und Formeln und behält Formatierung, Rahmen, Zahlenformate und Gültigkeitsprüfung. .Clear entfernt alles — Inhalt und alle Formatierungsschichten. Nutzen Sie .ClearContents, um Daten zu wischen und dabei eine Vorlage intakt zu halten, und .Clear nur, wenn Sie die Zellen auf einen völlig leeren, unformatierten Zustand zurücksetzen wollen.

Wie leere ich Zellinhalte, behalte aber die Formatierung in VBA?

Nutzen Sie .ClearContents: Range("B2:B50").ClearContents entfernt die Werte und Formeln und lässt dabei Rahmen, Farben, Zahlenformate und Gültigkeitsprüfung an ihrem Platz. Meiden Sie .Clear, das all diese Formatierung ebenfalls abzieht, und meiden Sie = "", das einen String der Länge null hinterlässt statt einer wirklich leeren Zelle.

Ist eine Zelle auf "" zu setzen dasselbe wie sie in VBA zu leeren?

Nein. Range("A1").Value = "" speichert einen String der Länge null, was ein Wert ist: ISBLANK gibt False zurück, COUNTA zählt die Zelle, und IsEmpty meldet sie als nicht leer. Um eine Zelle wirklich leer zu machen, nutzen Sie Range("A1").ClearContents oder Range("A1").Value = Empty. Die Leerstring-Zelle sieht leer aus, verhält sich aber als gefüllt.

Was ist der Unterschied zwischen Clear und Delete in VBA?

.Clear (und .ClearContents) leert eine Zelle, lässt sie aber an ihrem Platz, sodass sich die umliegenden Adressen nicht ändern. .Delete entfernt die Zelle ganz und verschiebt die benachbarten Zellen nach oben oder links, um die Lücke zu füllen, was jede Adresse unterhalb oder rechts davon ändert und Formeln mit #REF! brechen kann. Nutzen Sie .ClearContents, um eine Zelle zu leeren, und .Delete nur, wenn Sie sie weg haben wollen.

Wie leere ich ein ganzes Blatt oder einen UsedRange in VBA?

Um alle Daten zu leeren, aber die Formatierung zu behalten, nutzen Sie ws.UsedRange.ClearContents. Um das ganze Blatt einschließlich der Formate zu wischen, nutzen Sie ws.Cells.Clear. Beide handeln in einem einzigen Aufruf, was weit schneller ist als Zelle für Zelle zu schleifen, und UsedRange zielt genau auf die Region, die Daten enthält, ohne eine Range-Größe hart zu verdrahten.

Getestet in

Getestet in: Excel 365 (Windows 11), VBA 7.1 — zuletzt geprüft am 01.09.2026.

Verwandte Anleitungen: VBA Cell Value · VBA Delete Rows · VBA Copy Paste · VBA UsedRange · VBA Number Format