Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA leere Zelle setzen

VBA leere Zelle setzen
31.08.2016 12:25:50
Boory@gmx.net
Hallo Forum,
ich bin über ein Problem am am Verzweifeln, über das die VBA-Profis sicher nur den Kopf schütteln und lächeln werden.
Ich möchte folgenden VBA-Code verwenden:
Range("C3:C33").FormulaLocal = "=WENN(ZÄHLENWENN(Feiertage!A$1:A$13;A3);"F";"")"
Mein Problem:
Wenn ich bei der WENN-Funktion den "Dann-Wert" einer Zelle zuweise (also z.B. in M1 das F rein schreibe und hier eintrage
Range("C3:C33").FormulaLocal = "=WENN(ZÄHLENWENN(Feiertage!A$1:A$13;A3);$M$1;...)"
dann bekomme ich den Eintrag aus M1 auch angezeigt. Der "Sonst-Wert" muss aber zwingend leer sein, da ich mit einem weiteren Code-Snippet später die nächste freie Zelle in dieser Spalte abfragen muss. Daher kann ich dort auch nicht Null o.ä. eintragen, sondern muss die Zelle leer lassen.
Wie kann ich nun VBA davon überzeugen, zum einen DIREKT das "F" einzutragen und zum anderen "Sonst..." die Zelle leer zu lassen?
Wäre Euch für Eure Hilfe sehr dankbar!
Boory
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA leere Zelle setzen
31.08.2016 12:38:28
ChrisL
Hi
Leer = "" oder leer = keine Formel?
Generell mehr Gänsefüsse :)
Range("C3:C33").FormulaLocal = "=WENN(ZÄHLENWENN(Feiertage!A$1:A$13;A3);""F"";"""")"
cu
Chris
AW: VBA leere Zelle setzen
31.08.2016 13:12:14
Boory@gmx.net
Hallo ChrisL,
OK - MEIN Fehler... :)
Zelle soll GANZ leer sein, also auch keine Formel beinhalten, da sonst ja mein Abgreifen der "nächsten leeren Zelle" - später im Script - nicht greifen kann.
In sofern werden mir zwar mit dem Mehr an Gänsefüßchen die Zellen zwar leer angezeigt, wenn ich aber darauf klicke, sehe ich oben die Formel und das darf nicht sein.
Also GANZ LEER! :)
Anzeige
AW: VBA leere Zelle setzen
31.08.2016 13:22:39
ChrisL
Hi
Sub tt()
Dim rng As Range
Dim rng1 As Range, rng2 As Range
Const sMarker As String = "F"
Set rng1 = ActiveSheet.Range("A3:A33")
Set rng2 = Worksheets("Feiertage").Range("A1:A13")
For Each rng In rng1.Cells
If WorksheetFunction.CountIf(rng2, rng) > 0 Then
rng.Offset(0, 2) = sMarker
Else
rng.Offset(0, 2).ClearContents
End If
Next rng
End Sub

cu
Chris
Anzeige
AW: VBA leere Zelle setzen
31.08.2016 14:14:55
Boory@gmx.net
Hallo und vielen Dank, Chris,
ich habe das nun getestet. Funktioniert soweit alles so, wie es soll. Allerdings braucht die Ausführung extrem lange (ca 20 Sekunden), bis der prozess beendet ist. Woran könnte dies denn liegen?
Viele Grüße - Boory
AW: VBA leere Zelle setzen
31.08.2016 14:19:43
ChrisL
Hi
Vielleicht hast du viele Formeln?
Probiere mal...
Sub tt()
Dim rng As Range
Dim rng1 As Range, rng2 As Range
Const sMarker As String = "F"
Set rng1 = ActiveSheet.Range("A3:A33")
Set rng2 = Worksheets("Feiertage").Range("A1:A13")
Application.Calculation = xlCalculationManual
Application.ScreenUpdating = False
For Each rng In rng1.Cells
If WorksheetFunction.CountIf(rng2, rng) > 0 Then
rng.Offset(0, 2) = sMarker
Else
rng.Offset(0, 2).ClearContents
End If
Next rng
Application.Calculation = xlAutomatic
End Sub

cu
Chris
Anzeige
AW: VBA leere Zelle setzen
31.08.2016 14:34:03
Boory@gmx.net
hmmm... Leider wird da nichts schneller...
Irgendwo scheint es da einen Loop zu geben, den ich nicht finde. Gut, man kann mit der Verzögerung leben, da diese nur ein Mal im Monat auftritt - nämlich beim Erstellen eines neuen Monats... :)
Daher nochmals vielen Dank - ich lass das jetzt erst mal so. :)
Viele Grüße - Boory
PS.: Da die Datei leider recht groß ist, kann ich diese hier nicht hochladen. Wenn Du sie Dir mal insgesamt anschauen möchtest, sag Bescheid, dann lade ich sie Dir auf meinen Webspace hoch...
Anzeige
AW: VBA leere Zelle setzen
31.08.2016 12:47:21
Daniel
Hi
Zellen die eine Formel enthalten, sind nie leer.
Auch das Formelergebnis "" ist ein Text.
ein einfachsten ist, wenn du nach Einfügen der Formel das Formelergebnis durch seinen Wert ersetzt und zwar so:
With Range("C3:C33")
.FormulaLocal = "=WENN(ZÄHLENWENN(Feiertage!A$1:A$13;A3);"F";"")"
.Formula = .Value
End With
damit verschwindet dann die Formel und nur das "F" bleibt in den entsprechdenden Zellen stehen
(dh das ganze ist fixiert, aber da sich die Feiertage nicht spontan ändern, sollte das kein Problem sein), und die Zellen, in denen das Formelergebnis "" stand, werden zu echten Leerzellen.
das übliche:
.copy
.PasteSpecial xlpastevalues
funktioniert hier nicht, weil so die Texte "" in den Zellen erhaltenbleiben und nicht in echte Leerzellen gewandelt werden.
Gruß Daniel
Anzeige
AW: VBA leere Zelle setzen
31.08.2016 13:16:53
Boory@gmx.net
Hallo Daniel,
den Sinnzusammenhang verstehe ich... Nur...
Leider wird mir sofort beim Einfügen Deines Codes die Zeile
.FormulaLocal = "=WENN(ZÄHLENWENN(Feiertage!A$1:A$13;A3);"F";"")"
in Rot angezeigt.
Hast Du eine Ahnung, woran das liegen könnte?
Gruss Boory
AW: VBA leere Zelle setzen
31.08.2016 14:06:03
Daniel
Hi
Da hast du einen Schreibfehler drin.
Wie Chris schon schrieb: "mehr Gänsefüsschen"
Anführungszeichen, die zur Formel gehören, müssen immer Doppelt eingegeben werden.
Daran kann dann der Interpreter beim Übersetzen des Codes erkennen, ob die Anführungszeichen zum Text gehören, oder diesen begrenzen.
Gruß Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA leere Zelle setzen


Schritt-für-Schritt-Anleitung

Um in Excel mit VBA eine leere Zelle zu setzen, kannst du folgenden Code verwenden. Dieser Code überprüft, ob eine bestimmte Bedingung erfüllt ist und setzt das Ergebnis in die Zelle:

Sub SetEmptyCell()
    Dim rng As Range
    Dim rngFeiertage As Range
    Const sMarker As String = "F" ' Wert, der in die Zelle geschrieben werden soll
    Set rng = ActiveSheet.Range("A3:A33")
    Set rngFeiertage = Worksheets("Feiertage").Range("A1:A13")

    For Each cell In rng.Cells
        If WorksheetFunction.CountIf(rngFeiertage, cell) > 0 Then
            cell.Offset(0, 2) = sMarker ' Setze "F" in die Zelle
        Else
            cell.Offset(0, 2).ClearContents ' Zelle leeren
        End If
    Next cell
End Sub

Dieser Code durchläuft die Zellen im Bereich "A3:A33". Wenn die Bedingung erfüllt ist, wird "F" in die Zelle geschrieben, andernfalls bleibt die Zelle leer.


Häufige Fehler und Lösungen

Ein häufiger Fehler besteht darin, dass die Zelle trotz Verwendung von ClearContents nicht vollständig leer bleibt, weil sie eine Formel enthält. Um eine Excel-Zelle leer zu setzen, musst du sicherstellen, dass keine Formel vorhanden ist.

Lösung: Verwende Range("C3:C33").Value = "", um sicherzustellen, dass die Zellen vollständig leer sind.

Beispiel:

If WorksheetFunction.CountIf(rngFeiertage, cell) > 0 Then
    cell.Offset(0, 2) = sMarker
Else
    cell.Offset(0, 2).Value = "" ' Zelle wirklich leer setzen
End If

Alternative Methoden

Eine alternative Methode, um eine leere Zelle zu setzen, besteht darin, die Formel zu verwenden und anschließend die Werte zu ersetzen. Hier ist ein Beispiel:

With Range("C3:C33")
    .FormulaLocal = "=WENN(ZÄHLENWENN(Feiertage!A$1:A$13;A3);"F";"")"
    .Value = .Value ' Setze den Wert und entferne die Formel
End With

Durch diese Methode wird die Formel entfernt und die Zelle wird tatsächlich leer, wenn das Ergebnis der Formel leer ist.


Praktische Beispiele

Hier sind einige praktische Beispiele, die zeigen, wie man mit verschiedenen Bedingungen arbeitet:

  1. Wenn dann sonst leeres Feld:

    If cell.Value = "" Then
       cell.Offset(0, 1).Value = "Leer" ' Setze "Leer" in die nächste Zelle
    Else
       cell.Offset(0, 1).ClearContents ' Zelle leer lassen
    End If
  2. Formel verwenden, um Zellen leer zu lassen:

    Range("C3:C33").FormulaLocal = "=WENN(A3<>"";A3;"""")" ' Wenn A3 leer, dann auch C3 leer

Tipps für Profis

  • Verwende Application.ScreenUpdating = False, um die Bildschirmaktualisierung während der Ausführung des Codes zu deaktivieren. Dies kann die Ausführungsgeschwindigkeit verbessern.
  • Nutze Application.Calculation = xlCalculationManual, um die Berechnung während der Ausführung deiner Makros zu verhindern, besonders in großen Dateien.
  • Überprüfe regelmäßig, ob deine Datenbereiche korrekt definiert sind, um unnötige Schleifen zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass eine Zelle wirklich leer ist? Um sicherzustellen, dass eine Zelle wirklich leer ist, stelle sicher, dass keine Formel in der Zelle vorhanden ist. Verwende ClearContents oder setze den Wert direkt auf "".

2. Was passiert, wenn ich "" in eine Zelle schreibe? "" wird als Text interpretiert und die Zelle bleibt nicht wirklich leer. Daher ist es wichtig, die Zelle ohne Formel oder Wert zu belassen, um sie als leer zu klassifizieren.

3. Wie kann ich die Ausführungsgeschwindigkeit meines VBA-Codes verbessern? Deaktiviere die Bildschirmaktualisierung und die automatische Berechnung während der Ausführung deines Codes, um die Geschwindigkeit zu erhöhen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige