HERBERS Excel-Forum - das Archiv

Thema: Zellen Inhalt löschen, außer bestimmten Wert

Zellen Inhalt löschen, außer bestimmten Wert
Bernhard
Guten Morgen Forum,

hab ein kleines Problem und komm nicht drauf wie man es löst, Suchfunktion hat mich leider auch nicht weitergebracht.

Meinen VBA Code, schaut in Zeile H4 bis NI4 ob in einer Zelle "FT" drinsteht und löscht dann alle werte dieser Spalte, funktioniert auch.

Nun soll er aber nicht alle Werte in dieser Spalte löschen, wenn ein "X" drinsteht, soll er diese Zelle nicht löschen...
komm nicht drauf.
Hier mein Code:

Sub FeiertagLöschen()

Dim FT As Object

For Each FT In ActiveSheet.Range("H4:NI4")
Debug.Print FT.Value
If FT.Value = "FT" Then
Range(Cells(11, FT.Column), Cells(40, FT.Column)).ClearContents
End If
Next FT

End Sub

Danke im voraus Grüße Bernhard
AW: Zellen Inhalt löschen, außer bestimmten Wert
GerdL
Guten Morgen Bernhard!

MatchCase=False lässt hier große u. kleine "x" als alleiniges Zeichen in den Zellen ab Zeile 11 stehen.
Sub Unit()


Dim FT As Range

For Each FT In ActiveSheet.Range("H4:NI4")
If FT.Value = "FT" Then
With Range(Cells(11, FT.Column), Cells(40, FT.Column)).Cells
If WorksheetFunction.CountIf(.Cells, "X") = 0 Then
.ClearContents
Else
.ColumnDifferences(.Find("X", , xlValues, xlWhole, MatchCase:=False)).ClearContents
End If
End With
End If
Next FT

End Sub

Gruß Gerd
AW: Zellen Inhalt löschen, außer bestimmten Wert
Bernhard
Danke Gerd ,

genau das was ich gesucht habe....klappt perfekt!

lg
AW: Zellen Inhalt löschen, außer bestimmten Wert
daniel
Hi
am einfachsten mit einer zweiten Schleife über die Spalte
dim FT as range, X as range

for Each FT in Range("H4:NI4")
If FT.Value = "FT" Then
For each X in Range(Cells(11, FT.Column), Cells(40, FT.Column))
if X.Value <> "" then if X.value <> "x" then X.ClearContents
End If
end if
Next


ein etwas kreativerer Weg ist dieser, da er ohne Schleife auskommt:
With Range("H4:NI4")

.Replace "FT", True, xlWhole
With Intersect(.SpecialCells(xlCellTypeConstants, 4).EntireColumn, Range("H11:NI40"))
.Replace "x", True, xlWhole
.SpecialCells(xlCellTypeConstants, 3).ClearContents
.Replace True, "x", xlWhole
End With
.Replace True, "FT", xlWhole
End With

dafür funktioniert er nur mit ein paar Einschränkungen, z.B. müssen die Werte als als Konstante Werte vorliegen und nicht als Formel
außerdem muss es in der Zeile 4 mindestens einmal den Wert "FT" geben und es muss auch Werte geben, die gelöscht werden müssen, ansonsten läuft der Code auf einen Fehler. Das kann man aber vermeiden, wenn man vor diesem Code ein "On Error Resume Next" ausführt, dh bei einem Fehler gibt es keinen Abbruch, sondern es wird einfach die nächste Programmzeile ausgeführt. in diesem Fall kann man das so machen.

Gruß Daniel