Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Inhalt Zellen löschen wenn Bedingung erfüllt

Inhalt Zellen löschen wenn Bedingung erfüllt
Bene
Hey Leute,
nachdem ihr mir letzes Mal schon super schnell helfen konntet, hätt ich nochmal eine Frage an Euch.
Das Programm ist an sich denke ich kein großer Aufwand. Und zwar bin ich auf der Suche nach einem Makro, welches mir den INHALT (nicht die Zelle selbst) löscht, wenn in der Zelle "....." steht. Das eigentliche Problem ist, dass in den Zellen auch unterschiedlich viele Punkte stehen können.
Habts ihr da einen Vorschlag für mich?!
Danke Euch schon mal!
Anzeige
Rückfrage
06.08.2009 11:05:20
Wolli
Hallo Bene,
heißt das, Du hast ein Tabellenblatt mit vielen, vielen Zellen? Einige davon enthalten nur Punkte (mindestens wie viele?) und diese sollen gelöscht werden? Und Du musst die Aufgabe oft und regelmäßig ausführen?
Bitte werde etwas präziser.
Gruß, Wolli
AW: Inhalt Zellen löschen wenn Bedingung erfüllt
06.08.2009 11:16:16
Erich
Hi Vorname,
probier mal (löscht, wenn in der Zelle nur 1 bis 10 Punkte stehen):

Option Explicit
Sub PunkteLoesch()
Dim rngBer As Range, rngC As Range, aStr(1 To 10), ii As Integer, rngL As Range
Set rngBer = Range("A:B")            ' Wirkungsbereich, anpassen
aStr(1) = "."
For ii = 2 To 10
aStr(ii) = aStr(ii - 1) & "."
Next ii
For Each rngC In Intersect(rngBer, ActiveSheet.UsedRange)
If IsNumeric(Application.Match(rngC.Value, aStr, 0)) Then
If rngL Is Nothing Then
Set rngL = rngC
Else
Set rngL = Union(rngL, rngC)
End If
End If
Next rngC
If Not rngL Is Nothing Then rngL.ClearContents
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Inhalt Zellen löschen wenn Bedingung erfüllt
06.08.2009 11:48:34
Bene
Danke Euch erst mal!
@Erich: Dein Makro funktioniert schon genau so wie ich mir das vorgestellt hatte. Allerdings (habs ausprobiert) werden nur bis zu zwei Punkte in einer Zelle gelöscht. Stehen mehr als zwei Punkte in einer Zelle, wird der Zellinhalt nicht gelöscht. Ich hab zwar rumprobiert, aber irgendwie nicht die richtige 'Stellschraube' in deinem Programm gefunden. Ist ja sicher nur ein Parameter, der zu ändern ist. Sorry, für meine Unwissenheit in VBA ;)
Ich hab auch mal noch meine Beispieltabelle angehängt!
https://www.herber.de/bbs/user/63658.xls
Hinweis: Die Daten aus den Fragebogen werden via einem anderen Makro importiert, deshalb sieht die Fromatierung etwas komisch aus.
Grüße
Anzeige
AW: die Punkte sind keine Punkte sondern 3-Punkte.
06.08.2009 12:08:43
Daniel
Hi
deine "Punkte" sind keine Punkte, sondern das Zeichen mit dem ASCII-Code 133 "…", nämlich 3 Punkte
normale Punkte "." haben den ASCII-Code 46
daß ist der Punkt, in dem du in deinem Makro drehen musst.
so wie diese Zeichen verwendet werden, würde ich sie einfach mit BEARBEITEN - ERSETZEN, bzw im Makro mit
Cells.Replace Chr(133), "" entfernen und für die normalen Punkte halt Cells.Replace ".", ""
Gruß, Daniel
Anzeige
AW: 3-Punkte gehen nicht...
06.08.2009 12:24:10
robert
hi,
ich habs ausprobiert mit 1+2 ..
gehts
mit 3 ...
gehts nicht ?
gruß
robert
AW: 3-Punkte gehen nicht...
06.08.2009 12:29:29
Daniel
Hallo
das ist ein anderes Zeichen !!!!! nicht der gewöhnliche Punkt !
Kopier dir mal aus einer Zeile, in der das Makro nicht funktioniert EIN Zeichen raus in eine andere Zelle.
oder versuch mal, von den 3 Punkten in meinem Beispiel eines zu selektien.
ich hoffe, dann verstehst du, worum es geht.
Gruß, Daniel
Anzeige
sorry-geht nicht...
06.08.2009 12:54:38
robert
hi Daniel,
ich habe es in einem blatt ausprobiert
mit dem punkt auf der tastatur -gewöhnlicher Punt unter dem doppelpunkt .
bsi zu 2 punkte geht es - warum nicht mit 3 ?
gruß
robert
AW: sorry-geht nicht...
06.08.2009 13:16:15
Daniel
Nochmal, ganz langsam für dich:
ich hab mir Erichs Makro nicht angeschaut, aber:
die meisten Punkte in deiner Beispieldatei sind nicht die Punkte, die du auf der Tastatur findest, SONDERN EIN ANDERES ZEICHEN.
Du darfst also nicht nur den "Tastatur-Punkt" verwenden, sondern eben dieses Zeichen.
hier nochmal beide Zeichen gebenübergestellt, in einer nicht-Proprotionalen Schrift, damit du siehst, daß es wirklich ein Zeichen ist:
"." - ASCII-Code 46
"…" - ASCII-Code 133

dh du musst im Makro nicht das Zeichen "." verwenden, sondern das Zeichen "…".
und wie du das am besten wegbekommst, hab ich dir schon erklärt.
so, daß wars jetzt zum 3. und letzten mal.
Gruß, Daniel
Anzeige
@Daniel.. bitte...
06.08.2009 13:26:01
robert
hi,
ich habe keine beispieldatei hochgeladen :-)
ich habe doch geschrieben, was ich gemacht habe.....
..über die tastatur 1 oder 2 punkte eingeben-makro geht, punkte werden gelöscht
3 punkte eingeben-es wird nichts gelöscht
sorry wenn ich dich nerve, aber ich finde den punkt im makro nicht, warum
es bei dere und mehr punkten nicht geht
gruß
robert
Anzeige
was Daniel meint ist
06.08.2009 13:38:19
MichaV
...Du kannst die drei Punkte nicht einfach so eingeben, denn es ist nur ein Zeichen, nicht 3 einzelne Punkte. Und solange Du keine Taste mit 3 Punkten hast, musst Du einen Umweg gehen.
Drück Alt+0133 auf dem Ziffernblock (NumLock muss aktiviert sein)
http://de.wikipedia.org/wiki/...#Tastatur
Gruß- Micha
Anzeige
Danke Micha,Erich hat mir den Weg gezeigt..oT
06.08.2009 17:47:07
robert
AW: @Daniel.. bitte...
06.08.2009 13:41:14
Daniel
Hi
meine Antwort bezieht sich auf die Beispieldatei in diesem Beitrag:
https://www.herber.de/forum/messages/1094003.html
wenn du was anderes hast, solltest du selber deine Beispieldatei mit deinem bisherigen Makro hochladen und auch darauf hinweisen, daß es um ein anderes Problem geht.
und wenn es um das Makro geht, daß du verwendest, es ist von Erich, nicht von mir.
Gruß, Daniel
Anzeige
AW: @Daniel.. bitte...
06.08.2009 13:47:11
Bene
Hi Daniel,
Ich habe deine Vorgehensweise jetzt verstanden und es funktioniert einwandfrei auf mein Beispiel!!!
Sub Punkte_ersetzen()
Cells.Replace Chr(133), ""
Cells.Replace ".", ""
End Sub
Perfekt, danke dir und selbstverständlich auch allen anderen!!!
Super Forum ;)
Gruß, Bene
Anzeige
Danke Daniel,hier die Datei....
06.08.2009 13:52:36
robert
hi,
das makro ist von erich, stimmt, aber könntest du nun einen blick
darauf werfen, warum nur bis zu 2 punkte gelöscht werden-ich finde es nicht :-( ?
danke und
gruß
robert
https://www.herber.de/bbs/user/63668.xls
AW: Danke Daniel,hier die Datei....
06.08.2009 14:23:44
Daniel
sorry, ich hab alles gesagt, was ich dazu sagen kann.
schau dir einfach mal jedes einzelne Zeichen, daß nach Punkt aussieht, in deiner Beispieldatei genau an und vergleiche das mit dem Makro, dann wirst du die Ursache schon finden.
Für Bene als den ursprünglichen Fragesteller ist das Problem ja gelöst.
Gruß, Daniel
Anzeige
Na dann nicht-auch gut
06.08.2009 14:41:40
robert
AW: Es tut mir wirklich leid
06.08.2009 15:29:39
Daniel
aber das Problem, warum das Makro bei deiner Beispieldatei nicht funktioniert, hat die gleichen Ursachen wie in Benes Beispspiel: ES SIND UNTERSCHIEDLICHE ZEICHEN.
aber das habe ich schon mehrfach zu erklären versucht.
wenn du das nicht kapierst, kann ich auch nicht helfen, Bene hat meine Erklärungen verstanden.
Gruß, Daniel
Anzeige
du kannst sagen was du willst, aber..
06.08.2009 16:17:35
robert
es sind NORMALE PUNKTE
dass es auch andere wege gibt, ist mir bewusst, aber du nimmst dir ja nicht die mühe das zu lesen was man dir schreibt-ich gebe ..... ein, sonst nichts
und jetzt schluss
gruß
robert
es WAREN normale Punkte, SIND aber nicht
06.08.2009 16:36:31
Erich
Hi Robert,
WAREN bedeutet: Du hast drei einzelne Punkt eingegeben.
Aber es SIND keine normalen Punkte - denn du hast bei den AutoKorrektur-Optionen
bei "Während der Eingabe ersetzen" einen Haken stehen.
In der darunter stehenden Liste findest du sicher auch die drei Punkte...
Das führt dazu, dass drei eingegebene Punkte automatisch durch ein Zeichen Chr(133) ersetzt werden.
Hier beide Varianten - mal mit, mal ohne Ersetzung:
Tabelle1
 ABC
1  1. Zeichen istAnzahl Zeichen
2...463
3…1331

verwendete Formeln
Zelle Formel
B2 =CODE(A2)
C2 =LÄNGE(A2)
B3 =CODE(A3)
C3 =LÄNGE(A3)

Tabellendarstellung in Foren Version 4.11

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Danke Erich, aber..
06.08.2009 16:54:58
robert
hi,
wie müsste dann dein makro aussehen, dass es funktioniert ?
oder muss ich nur den haken wegnehmen ?
gruß
robert
AW: Danke Erich,Haken raus ;-) owT
06.08.2009 17:02:03
robert
AW: du kannst sagen was du willst, aber..
07.08.2009 00:39:31
Daniel
Sorry in deiner Beispieldatei, die du hochgeladen hast,. sind es aber NICHT normale Punkte (ASCII-CODE 46), sondern eben eine Mischung aus normalen Punkten und den 3er-Punkten, dh das Zeichen mit dem ASCII-Code 133.
Da ich mittlerweile schon ein wenig länger hier im Forum aktiv bin, hat mich halt die Erfahrung gelehrt, daß im Regelfall die Beispieldatei immer die besser Informationsquelle ist als die Beschreibung des Fragestellers,
Dh. wenn ich mich auf die Beispieldatei konzenriere, gelingt es mir in den meisten Fällen eine für den Fragesteller zufriedenstellendere Antwort zu finden, als wenn ich nur auf die Problembeschreibung achte.
Das liegt IMHO daran, daß sich allein mit Worten nicht alle Einflussfaktoren ausreichend beschreiben lassen, die aber in der Beispieldatei normalerweise sofort ersichtlich sind.
Daher hat für mich die Beispieldatei immer Priorität vor irgendwelchen Anmerkungen des Fragestellers.
Klar, die lese und beachte ich zwar auch, aber wenn die Beschreibung von der Beispeildatei abweicht, dann gilt für mich, was in der Beispieldatei steht.
so ist nun mal, Erfahrung aus mehren Jahren aktivität im Forum.
Gruß, Danile
Anzeige
@Daniel zur Abrundung..
07.08.2009 06:44:35
robert
hi Daniel,
das ganze hat so begonnen:
ben will, dass die punkte gelöscht werden, erich schreibt ein makro-ok
im beitext schreibt erich , dass dieses von 1 bis 10 punkte löscht-ok
daraufhin habe ich es probiert und habe 1 bis 10 punkte eingegeben-ok
jetzt muss ich aber zugeben :-) dass ich nicht !!! wusste, dass excel ab 3 punkten
das nicht als 3 punkte sieht, wie der, der vor dem computer sitzt
deshalb war ich so erstaunt, dass du sagst, ich habe keine punkte eingegeben
aber letzendlich hat sich alles aufgeklärt, danke für deine geduld und bitte dich um entschuldigung
und hoffe, dass wir uns wieder ungetrübt im forum begenen können.
gruß
robert
Anzeige
AW: @Daniel zur Abrundung..
07.08.2009 11:19:44
Daniel
HI Robert
kein Problem, schließlich hab ich bei der Diskussion auch was dazugelernt.
nach dem ich jetzt verstanden habe wie die Punkte zustande kommen, kann ich auch Erichs Makro entsprechen anpassen, daß es unabhängig von der Autokorrektur funktioniert.
Sub PunkteLoesch()
Dim rngBer As Range, rngC As Range, rngL As Range
Dim i As Long, ii As Long
Dim aStr(23)
Set rngBer = Range("A:B")            ' Wirkungsbereich, anpassen
For i = 0 To 3
For ii = 0 To 2
aStr((i * 3 + ii) * 2) = WorksheetFunction.Rept("…", i) & WorksheetFunction.Rept(" _
.", ii)
aStr((i * 3 + ii) * 2 + 1) = WorksheetFunction.Rept(".", i * 3 + ii)
Next ii
Next i
For Each rngC In Intersect(rngBer, ActiveSheet.UsedRange).SpecialCells(xlCellTypeConstants,  _
2)
If IsNumeric(Application.Match(rngC.Value, aStr, 0)) Then
If rngL Is Nothing Then
Set rngL = rngC
Else
Set rngL = Union(rngL, rngC)
End If
End If
Next rngC
If Not rngL Is Nothing Then rngL.ClearContents
End Sub
Gruß, Daniel
Anzeige
DANKE Daniel-funkt ;-) owT
07.08.2009 12:38:04
robert
kürzere Variante
07.08.2009 12:59:04
Erich
Hi Daniel,
an einigen Stellen konnte ich das noch vereinfachen/kürzen:

Option Explicit
Sub PunkteLoeschN()
Dim rngBer As Range, rngC As Range, rngL As Range, aStr(1 To 18) As String
Dim ii As Long, jj As Long
Set rngBer = Range("A:B")            ' Wirkungsbereich, anpassen
aStr(1) = "."
For ii = 2 To 10
aStr(ii) = aStr(ii - 1) & "."
Next ii
For ii = 0 To 2
For jj = 0 To 2
aStr(10 + 3 * ii + jj) = String(ii + 1, "…") & String(jj, ".")
Next jj
Next ii
For Each rngC In Intersect(rngBer, ActiveSheet.UsedRange) _
.SpecialCells(xlCellTypeConstants, 2)
If IsNumeric(Application.Match(rngC.Value, aStr, 0)) Then
If rngL Is Nothing Then
Set rngL = rngC
Else
Set rngL = Union(rngL, rngC)
End If
End If
Next rngC
If Not rngL Is Nothing Then rngL.ClearContents
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
Mit Autofilter
06.08.2009 11:36:48
Daniel
Hi
kannst du die Zellen nicht einfach mit dem Autofilter filtern?
als bedingung "enthält" und dann soviele Punkte einfügen wie mindestens vorkommen, also z.B. "....."?
dann kannst du ja die sichtbaren einfach löschen.
falls du es als Makro brauchst, nimm den Recorder.
Gruß, Daniel
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Zelleninhalt in Excel löschen, wenn eine Bedingung erfüllt ist


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und lade die Tabelle, in der Du den Inhalt bestimmter Zellen löschen möchtest.

  2. Aktiviere den VBA-Editor:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf „VBAProject (DeineDatei.xlsx)“ und wähle „Einfügen“ > „Modul“.
  4. Kopiere den folgenden VBA-Code in das Modul:

    Option Explicit
    Sub PunkteLoesch()
       Dim rngBer As Range, rngC As Range, rngL As Range
       Dim i As Long, ii As Long
       Dim aStr(23)
       Set rngBer = Range("A:B") ' Wirkungsbereich anpassen
       For i = 0 To 3
           For ii = 0 To 2
               aStr((i * 3 + ii) * 2) = WorksheetFunction.Rept("…", i) & WorksheetFunction.Rept(".", ii)
               aStr((i * 3 + ii) * 2 + 1) = WorksheetFunction.Rept(".", i * 3 + ii)
           Next ii
       Next i
       For Each rngC In Intersect(rngBer, ActiveSheet.UsedRange).SpecialCells(xlCellTypeConstants, 2)
           If IsNumeric(Application.Match(rngC.Value, aStr, 0)) Then
               If rngL Is Nothing Then
                   Set rngL = rngC
               Else
                   Set rngL = Union(rngL, rngC)
               End If
           End If
       Next rngC
       If Not rngL Is Nothing Then rngL.ClearContents
    End Sub
  5. Schließe den VBA-Editor und kehre zu Excel zurück.

  6. Führe das Makro aus:

    • Drücke ALT + F8, wähle „PunkteLoesch“ aus und klicke auf „Ausführen“.

Damit wird der Inhalt der Zellen in dem angegebenen Bereich gelöscht, wenn die Zellen die Bedingung erfüllen.


Häufige Fehler und Lösungen

  • Problem: Das Makro löscht nicht alle Punkte.

    • Lösung: Stelle sicher, dass Du das richtige Zeichen verwendest. Bei drei Punkten handelt es sich um das Zeichen mit dem ASCII-Code 133 ("…"). Verwende Cells.Replace Chr(133), "" im Makro, um dieses Zeichen zu entfernen.
  • Problem: Das Makro findet die Zellen nicht.

    • Lösung: Überprüfe den Wirkungsbereich (Set rngBer = Range("A:B")) und stelle sicher, dass die Zellen in diesem Bereich liegen.

Alternative Methoden

  • Autofilter verwenden:

    • Du kannst die Zellen auch mit dem Autofilter filtern. Setze die Bedingung auf „enthält“ und füge die entsprechenden Punkte ein. Markiere die sichtbaren Zellen und lösche sie.
  • Bearbeiten -> Ersetzen:

    • Eine manuelle Methode ist, den Befehl „Bearbeiten -> Ersetzen“ zu nutzen, um alle Punkte durch nichts zu ersetzen.

Praktische Beispiele

  1. Beispiel für ein Makro, das auch andere Zeichen berücksichtigt:

    Sub Punkte_ersetzen()
       Cells.Replace Chr(133), ""
       Cells.Replace ".", ""
    End Sub

    Dieses Makro entfernt sowohl die drei Punkte als auch die normalen Punkte.

  2. Beispiel für das Löschen einer ganzen Zeile:

    Sub ZeileLoesch()
       Dim rng As Range
       For Each rng In Range("A1:A10")
           If rng.Value = "Bedingung" Then
               rng.EntireRow.Delete
           End If
       Next rng
    End Sub

    Hier wird die gesamte Zeile gelöscht, wenn eine Zelle die Bedingung erfüllt.


Tipps für Profis

  • Nutze die Möglichkeit, mehrere Bedingungen in Deinem Makro zu kombinieren, um komplexere Anforderungen zu erfüllen.
  • Speichere regelmäßig Sicherungskopien Deiner Datei, bevor Du Makros ausführst, um Datenverluste zu vermeiden.

FAQ: Häufige Fragen

1. Wie kann ich den Inhalt in bestimmten Spalten löschen? Du kannst den Bereich im Makro anpassen, z. B. Set rngBer = Range("C:D"), um nur die Spalten C und D zu betreffen.

2. Funktioniert das Makro in allen Excel-Versionen? Ja, das Makro sollte in den meisten modernen Excel-Versionen (2010 und höher) funktionieren, solange die VBA-Funktionalität aktiviert ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige