Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.04.2024 20:05:21
28.04.2024 18:33:31
28.04.2024 18:25:12
28.04.2024 14:18:05
Anzeige
Archiv - Navigation
1916to1920
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Werte bedingt löschen

Werte bedingt löschen
01.02.2023 08:24:51
Thomas
Guten Morgen Excel Freunde,
mit diesem Macroteil lösche ich alle Werte ( Zahlen, Texte, Daten ( Datum Mehrzahl) außer ein paar Ausnahmen.
For Each C In Range("c2:nk150")
Select Case True
Case C Like "us" Or C Like "fr" Or C Like "zf" Or C Like "ZF"
Case Else: C.Clear
End Select
Next C
Diese Version hat jedoch zwei Nachteile:
Es wird nach groß und klein unterschieden ( Like "us" wird nicht gelöscht aber Like "Us" wird gelöscht). Es soll aber kein Wert gelöscht werden der z.B. mit us beginnt.
Unabhängig ob groß der Kleinschreibung.
Und das zweite Problem ist die Geschwindigkeit. Es dauert ziemlich lange bis alle Zellen abgeklappert sind.
Hat jemand eine bessere Lösung für mich?.
mfg thomas

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Werte bedingt löschen
01.02.2023 09:02:06
Daniel
Hi
Probiers mal so
Dim CC AS Range
For each c in Range("c2:nk150")
Select Case LCase(C.value)
    Case "us", "fr", "zf"
       If CC is nothing then
            Set CC = C
        Else
             Set CC = Union(CC, c)
       End if
    Case else
End select
Next
If not CC is noting then CC.Clear
Wenn du nur inhalte löschen willst und nicht Formate, könntest du auch ERSETZTEN:
With Range("c2:nk150")
    .replace "us", "", lookat:=xlwhole, matchcase:=false
    .replace "zf", ""
    .replace "fr", ""
End with 
Gruß Daniel
        
        

Anzeige
AW: Werte bedingt löschen
01.02.2023 13:27:25
Thomas
Hallo Daniel
bei diesen Vorschlag funktioniert das ignorieren der Groß und Kleinschreibung.
Aber leider wird ein Platzhalter nicht berücksichtigt. Das ich dies benötige hatte ich aber auch dummerweise nicht geschrieben.
Kannst du dies hier noch mit berücksichtigen?
Dim CC AS Range
For each c in Range("c2:nk150")
Select Case LCase(C.value)
Case "us", "fr", "zf"
If CC is nothing then
Set CC = C
Else
Set CC = Union(CC, c)
End if
Case else
End select
Next
If not CC is noting then CC.Clear
bei diesem Vorschlag ( mit Abstand die schnellste Version)
With Range("c2:nk150")
.Replace "us", "", lookat:=xlWhole, MatchCase:=true
.Replace "zf", ""
.Replace "fr", ""
End With
werden "us" "zf" "fr" gelöscht. Diese dürfen aber nicht gelöscht werden.
Hallo volti
ich hatte leider nicht erwähnt das ich diesen Platzhalte * benötige.
Die Sache mit der Großschreibung und Kleinschreibung würde sonst funktionieren. Aber es ist doch ganz schön langsam.
Anbei noch eine kleine Beispieltabelle.
https://www.herber.de/bbs/user/157591.xlsb
Könnt ihr euch dies nochmal anschauen?
mfg thomas
Anzeige
AW: Werte bedingt löschen
01.02.2023 14:06:58
Daniel
ja wo kommt der Platzhalter plötzlich her.
müsstest du hier Bezahlen, wäre jetzt eine zusätzliche Rechnung fällig.
die schnelle Replace-Variante wird in deinem Fall nicht funktionieren.
vielleicht so:
dim C as range
dim CC as range
for each C in Range("c2:nk150").SpecialCells(xlcelltypeconstants) 'Schleife über Zellen mit inhalt
    select case Left(LCase(C), 2)
        Case "us", "fr", "zf"
        Case else
            if CC is nothing then 
                 set CC = C
           else
                 set CC = union(CC, C)
         end if
    end select
next
if not CC is nothing then CC.Clear
Gruß Daniel
Anzeige
perfekt riesen dank
01.02.2023 16:42:10
Thomas
Hallo Daniel und Uwe,
Daniel mit dem:
"müsstest du hier Bezahlen, wäre jetzt eine zusätzliche Rechnung fällig" hast du natürlich mehr als nur Recht. Eigentlich hätte ich es mal langsam wissen müssen das so etwas sehr wichtig ist.
Dein Vorschlag funktioniert noch nicht so richtig. Sobald man ein Platzhalter Case "us*" einbaut wird der ganze Wert gelöscht.
Uwe,
deine Version klappt super und ist auch deutlich schneller als meine. Perfekt riesen dank.
Habt alle, UweD, Daniel und volti, recht vielen vielen dank für eure super schnelle Hilfe.
mfg Thomas
.
AW: perfekt riesen dank
02.02.2023 11:25:38
Daniel
Naja der Platzhalter ist hier ja nicht mehr nötig, da über das Left(..., 2) der Text auf die ersten beiden Zeichen reduziert wird, dann funktioniert auch der einfache Vergleich ohne Platzhalter für die Auswertefunktion "Beginnt mit".
Es ist falsch, hier den Platzhalter zu verwenden
Gruß Daniel
Anzeige
AW: Werte bedingt löschen
01.02.2023 14:28:11
UweD
Hallo
was hältst du hiervon?
Private Sub CommandButton2_Click()
    Dim RNG As Range
    Set RNG = Range("c2:nk150")
    Application.ScreenUpdating = False
    
    'Nur auf Zellen mit Text anwenden
    If WorksheetFunction.CountA(RNG) = 0 Then Exit Sub
    
    For Each c In RNG.SpecialCells(xlCellTypeConstants, 2)
        Select Case True
        Case LCase(c) Like "us*", LCase(c) Like "fr*", LCase(c) Like "zf*"
            'mach nix
        Case Else
            c.Clear
        End Select
    Next c
    Application.ScreenUpdating = True
End Sub
LG UweD
Anzeige
AW: Werte bedingt löschen
01.02.2023 09:05:25
volti
Hallo Thomas,
wenn beim LIKE-Befehl nicht zwischen groß und klein unterscheiden werden soll, muss Du oben auf dem Blatt Option Compare Text einsetzen.
Da Du nicht mit dem * arbeitest, gehe ich davon aus, dass in den Feldern nur "us" oder "zf" steht.
Dann kannst Du es auch so machen.
Code:


Sub Test() Application.ScreenUpdating = False For Each C In Range("c2:nk150") Select Case LCase(C.Value) Case "us", "fr", "zf" Case Else: C.Clear End Select Next C Application.ScreenUpdating = True End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige