Excel - Zelleninhalte löschen, wenn in anderer Zelle "ein Wert" steht

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Da sind einige Fehler drin.
Vor allem muss das ein Ereigniscode sein, da kannst Du nicht einfach _TEST daraus machen, da muss schon Change stehen bleiben..
So (mit noch ein paar Änderungen) würde der Code schon mal klappen:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
    Select Case Target.Value
    Case "b"
        Range("C4:F14").Select
        Selection.ClearContents
    Case "c"
        Range("C4:F14").Select
        Selection.ClearContents
    End Select
End If
End Sub  

Goldene Regel: .Select macht jeden Code sehr langsam und kann (und SOLL) in 99,9% aller Fälle vermieden werden:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1")) Is Nothing Then
        Select Case Target.Value
        Case "b"
            Range("C4:F14").ClearContents
        Case "c"
            Range("C4:F14").ClearContents
        End Select
    End If
End Sub

Für nur zwei Auswahlmöglichkeiten wäre auch die Select Case Funktion nicht sinnvoll, aber ich nehme mal an, Du willst das noch weiter ausbauen.

Woher ich das weiß:Berufserfahrung – IT-Administrator (i.R.)
diece 
Fragesteller
 13.11.2013, 08:57

Hi Oubyi,

vielen Dank für die schnelle Antwort, funzt prima. Richtig, werde die SelectCase-Funktion noch mit weiteren Argumenten ausbauen.

Besten Dank nochmals

0
diece 
Fragesteller
 14.11.2013, 08:57

Guten Morgen,

habe noch eine Frage:

wenn die Zelle nun leer ist, wollte ich den Code wie folgt erweitern:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A1")) Is Nothing Then
            Select Case Target.Value
    **Case ""
                Range("C2").ClearContents**
    Case "b"
                Range("C4:F14").ClearContents
            Case "c"
                Range("C4:F14").ClearContents
            End Select
        End If
    End Sub

Leider klappt er dann nicht

Auch Case "0" hat nichts gebracht...

0
Oubyi, UserMod Light  14.11.2013, 18:47
@diece

Danke fürs ☆

Ich habe Deinen Code kopiert und bei mir eingefügt, und er funktioniert tadellos.
Wenn ich in A1 b schreibe wird der angegebene Bereich gelöscht.
Wenn ich jetzt in die Zelle A1 klicke und das b wieder lösche, dann wird der Inhalt von C2 gelöscht!
Natürlich muss A1 dann auch wirklich leer sein, es dürfen also auch keine Leerzeichen mehr dort stehen.
Wie gesagt, SO klappt es bei mir tadellos.

0

Da muss ich oubyi zustimmen:

Der Code muss im Ereignis Change des Worksheet stehen. Sonst weiß Excel ja nicht, dass es bei Veränderungen was machen muss.

Und der Code kann auch trefflich entrümpelt werden.

Private Sub Worksheet_Change(ByVal Target As Range)
'Abfrage, ob Änderung in Zelle A1 erfolgt ist
If Target.Address <> "$A$1" Then Exit Sub

If Not Target Is Nothing Then
    Select Case Target.Value
        Case "b"
            Range("C4:F14").Select
            Selection.ClearContents
        Case "c"
            Range("C4:F14").Select
            Selection.ClearContents
    End Select
End If
End Sub

oder noch kürzer:

Private Sub Worksheet_Change(ByVal Target As Range)
'Abfrage, ob Änderung in Zelle A1 erfolgt ist
If Target.Address <> "$A$1" Then Exit Sub

If Not Target Is Nothing Then
    If Target.Value = "b" Or Target.Value = "c" Then
            Range("C4:F14").Select
            Selection.ClearContents
    End If
End If
End Sub

Bei zwei Bedingungen kann man immer If statt Select Case nehmen. Erst bei mehr als 4 Bedingungen ist der Code mit Case kürzer als der mit If.