VBA Makro gesucht: Inhalt von Zellen löschen wenn eine andere Zelle bestimmten "TEXT" beinhalted?

4 Antworten

Probiere mal das hier:

Sub NobyTree2()

Dim x, y As Integer

   For x = 1 To 150
        If Cells(x, 18).Value = "STATUS1=grün" Then
           
            For y = 9 To 10
                Cells(x, y).Value = ""
            Next y
           
            For y = 12 To 14
                Cells(x, y).Value = ""
            Next y
           
        End If
       
        If Cells(x, 18).Value = "STATUS2=gelb" Then
           
            For y = 9 To 10
                Cells(x, y).Value = ""
            Next y
           
        End If
   
    Next x
       

End Sub

Sorry, einfacher mit Range.Clear

Sub NobyTree2()
Dim x, y As Integer

    For x = 1 To 150
        If Cells(x, 18).Value = "STATUS1=grün" Then
           
            Range(Cells(x, 9), Cells(x, 10)).Clear
            Range(Cells(x, 12), Cells(x, 14)).Clear
                     
        End If
       
        If Cells(x, 18).Value = "STATUS2=gelb" Then
           
            Range(Cells(x, 9), Cells(x, 10)).Clear
           
        End If
   
    Next x
       

End Sub


molekuelx 
Beitragsersteller
 08.03.2016, 13:23

Wenn ich den Befehl ausführe friert mein Excel ein ... :D

0

Mit IsValue habe ich keine Erfahrung. Ich würde herkömmlich If Target.Value = "STATUS1 = grün" Then abfragen.

Das .Select kannst du dir schenken. Anstelle dessen kannst du schreiben:

Range("I6:J6").ClearContents
Range("L6:N6").ClearContents

Die letzte Herausforderung besteht darin, das über alle Zeilen von 6 bis 150 laufen zu lassen. 

Baue eine For Schleife darum:

Dim i As Integer
For i=6 To 150
...
Next

Deine Befehle, in denen du dich auf Zeile 6 beziehst, änderst du so ab. Beispiel:

Range("I" & i & ":J" & i).ClearContents

molekuelx 
Beitragsersteller
 08.03.2016, 12:59

Vielen Dank schonmal für die schnelle Antwort.

Habe jetzt versucht schonmal das erste umzusetzen, um ersmal nur die Zelle R6 aubzuprüfen:

Private Sub Worksheet_Change(ByVal Target As Range)
'Abfrage, ob Änderung in Zelle A1 erfolgt ist
If Target.Address = "$R$6" Then
    If Target.Value = "STATUS1=grün" Then
        Range("I6:J6").ClearContents
        Range("L6:N6").ClearContents
    End If
End Sub

Leider passiert gar nichts :( Müsste doch eigentlich für die Zeile 6 schon funktionieren oder ?

 

0
Suboptimierer  08.03.2016, 13:11
@molekuelx

Normalerweise müsste ein Fehler kommen "If Block ohne End If".

Du hast zwei Ifs, aber nur ein End If.

Ansonsten müsste es laufen. Hast du das Ereignis auch am richtigen Sheet stehen?

PS: Der Kommentar passt längst nicht mehr ;)

0
molekuelx 
Beitragsersteller
 08.03.2016, 13:15
@Suboptimierer
Ja richtig! Hat doch funktioniert!!! Jetzt muss ich nur noch die anderen bedinungen integrieren. 
Private Sub Worksheet_Change(ByVal Target As Range)
'Abfrage, ob Änderung in Zelle A1 erfolgt ist
Dim i As Integer
For i = 6 To 150
If Target.Address = "$R$6" Then
    If Target.Value = "STATUS1=grün" Then
        Range("I6:J6").ClearContents
        Range("L6:N6").ClearContents
    End If
    ElseIf Target.Value = "STATUS2=gelb" Then
        Range("L6:N6").ClearContents
    End If
Next
End Sub

 

Er meldet aber: Laufzeitfehler '13': Typen unverträglichkeit.

 

0
Suboptimierer  08.03.2016, 13:28
@molekuelx

Probier mal folgendes:

Private Sub Worksheet_Change(ByVal Target As Range)
  'Abfrage, ob Änderung in Spalte R erfolgt ist
  Dim i As Integer
  For i = 6 To 150
    If Target.Address = "$R$" & i Then
        If Target.Value = "STATUS1=grün" Then
            Range("I" & i & ":J" & i).ClearContents
            Range("L" & i & ":N" & i).ClearContents
        End If
        If Target.Value = "STATUS2=gelb" Then
            Range("L" & i & ":N" & i).ClearContents
        End If
    End If
  Next
End Sub
1
molekuelx 
Beitragsersteller
 09.03.2016, 07:03
@Suboptimierer

Ich müsste nochmal revidieren ...Wieso oft zeigen sich einige Probleme erst bei der Anwendung.

Beispiel: Ich möchte nur dass die Felder I10:J10 und L10:N10 geleert werden, wenn in Feld R10 vorher STATUS2=gelb stand und durch STATUS1=grün ersetzt wurde.

--> wenn R10allt = R10neu dann soll nichts passieren.

--> dabei muss das makro aber jedes Feld in spalte R für sich checken und dann entscheiden ob es eine löschung durchführt

Ist sowas einfach möglich oder ist das eine größere operation? :-)

Vielen Dank für die Unterstützung!

1
Suboptimierer  09.03.2016, 07:47
@molekuelx

Beim Öffnen der Arbeitsmappe und nach jedem Ändern einer Zelle der Spalte R könntest du die Werte der Spalte R in einen versteckten Bereich kopieren.

Beim Ändern einer Zelle vergleichst du den aktuellen Inhalt dann mit dem Wert in der versteckten Spalte.

0

Nur auf Papier geschrieben und nicht getestet:

For Ze = 6 To 150
Inh=Cells (Ze, 18).Value
If InStr (1, Inh, "grün") <>0 Then
Range("I6:J6").ClearContent
Cells (Ze, 12).ClearContent
Cells (Ze, 14).ClearContent
ElseIf InStr (1, Inh, "gelb") <>0 Then
Range("I6:J6").ClearContent
End If
Next


Garfield0001  08.03.2016, 13:09

das Cells ist falsch ... ersetze es durch Range(Cells (Ze,12), Cells (Ze,14)).ClearContent und für das andere Range (in beiden Fällen) Range(Cells (Ze,9), Cells (Ze,10)).ClearContent

0