Zeilen löschen

Bild

Betrifft: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 08:33:46

Hallo :)
Ich würde gerne verschiedene Zeilen löschen bzw. ausblenden lassen, habe allerdings keine guten Kenntnisse mit Makros.
Es soll sich auf eine Zelle beziehen in der eine Wenn- und SVerweis Formel steht und wenn dann in dieser Zelle "???" angezeigt wird soll die komplette Zeile gelöscht werden.
Ich hab schon einige Beiträge zu diesem Thema gelesen, allerdings keine auf Grundlage einer Formel.
Ist das überhaupt mit Makros möglich?
Ich hoffe mir kann jemand weiterhelfen
Liebe Grüße :)

Bild

Betrifft: AW: Zeilen löschen
von: Esmo
Geschrieben am: 02.11.2015 08:40:35
Moin!
Du willst also auf zwei Bedingungen reagieren: 1. Die Zelle hat eine Formel 2. Das Ergebnis der Formel ist "???"
Und wo stehen Deine Daten? Tabelle, die in Zeile 1 beginnt oder willst Du dann immer von der aktuellen Zelle nach unten gehen (sprich die steht oberhalb aller Zellen, die ev. für die Löschung in Frage kommen) oder wie?
Gruß
Ralph

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 08:53:47
Ja genau
Ich hab mehrere Registerblätter und dort gibt es viele verschiedene Werte und sobald in einer Zelle (also immer in der Spalte F) die "???" stehen soll diese Zeile gelöscht werden.
Also würde ich eben gerne so zu sagen die gesamte Spalte F überprüfen lassen und sobald "???" auftaucht die Zeile dazu komplett löschen.
Hast du das gemeint?

Bild

Betrifft: AW: Zeilen löschen
von: Esmo
Geschrieben am: 02.11.2015 08:55:42
Sorry,
die Zeile soll aber nur gelöscht werden, wenn die Zelle in Spalte F eine Formel hat und das Ergebnis der Formel "???" ist? Oder willst Du alle Zellen löschen, die in Spalte F eine Formel haben?
Gruß
Ralph

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 09:03:52
Genau es sollen nur die Zeilen gelöscht werden, wenn dort in Spalte F die Formel steht mit dem Ergebnis "???"
Vielen Dank schon mal :)

Bild

Betrifft: AW: Zeilen löschen
von: Daniel
Geschrieben am: 02.11.2015 09:25:51
HI
eine einfache Lösung wäre folgende:
ändere die Formel so ab, dass statt dem ??? ein Fehlerwert (der NV-Fehler) oder Wahrheitswert ausgeben wird (also eine Wertart, die im Regelfall nicht als Ergebnis vorkommt).
denn dann kannst du diese Zellen so ganz einfach selektieren:
- alle Zellen selektieren
- Selektion über START - BEARBEITEN - SUCHEN UND AUSWÄHLEN - INHALTE - FORMELN - Wahrheitswert (oder Fehler)
auf die Zellen mit Wahrheitswert oder Fehler einschränken
- selektierte Zellen ausblenden oder löschen (mit der Option "ganze Zeile")
sieht dann als Code so aus (löschen von Zeilen mit Wahrheitswert):

Cells.SpecialCells(xlcelltypeformulas, 4).EntireRow.Delete
oder so (ausblenden von Zeilen mit Fehlerwert)
Cells.SpecialCells(xlcelltypeformulas, 16).EntireRow.Hidden = True
in der SpecialCells-Funktion steht die 4 für Wahrheitswerte und die 16 für Fehlerwerte
alternativ kannst du ja auch mit dem Autofilter nach ??? filtern und dann die sichtbaren Zeilen löschen (der Recorder ist dein Freund).
Dem Autofilter ist es egal, ob das "???" per Formel oder von Hand geschrieben wurde.
Gruß Daniel

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 09:49:07
Vielen Dank für die Antwort.
Also das Problem ist, dass diese NV-Fehler schon angezeigt werden, ich wollte die Formel eigentlich so ändern damit eben anstelle des Fehlers "???" angezeigt werden (allerdings nur in Spalte F). Das heißt der NV-Fehler kommt auch in anderen Spalten vor und dann werden alle ausgewählt (zumindest als ich es gerade getestet hab)
Kann man das vielleicht anpassen? Dass nur Fehler in der Spalte F ausgewählt werden?
Und muss ich das dann immer von Hand aktivieren oder geht das dann für alle Registerkarten automatisch?
Liebe Grüße :)

Bild

Betrifft: AW: Zeilen löschen
von: Daniel
Geschrieben am: 02.11.2015 09:51:40
Hi
wenns nur in der Spalte F gelten soll, dann eben

Columns(6).SpecialCells(xlcelltypeformulas, 16).EntireRow.Delete

Gruß Daniel

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 09:57:02
Vielen Dank das funktioniert! :)
Habe allerdings noch eine Frage, wie kann ich das nun einstellen, dass dies auf mehreren Registerblättern funktioniert?

Bild

Betrifft: AW: Zeilen löschen
von: Daniel
Geschrieben am: 02.11.2015 10:10:06
Hi
das musst du dann für alle Blätter einzeln ausführen oder eine Schleife über alle Blätter erstellen:

dim ws as Worksheet
for each ws in activeworkbook.worksheets
    ws.columns(6).Specialcells(xlcelltypeformulas, 16).EntireRow.Delete
next
und damit das ganze nicht mit einem Fehler abbricht wenn mal auf einem Tabellenblatt kein Fehler in der Spalte F vorhanden ist:
dim ws as Worksheet
On Error Resume Next
for each ws in activeworkbook.worksheets
    ws.columns(6).Specialcells(xlcelltypeformulas, 16).EntireRow.Delete
next
On Error Goto 0
dummerweise erzeugt die .SpecialCells-Funktion einen Fehlerabbruch, wenn sie keine Werte finden kann.
da es aber durchaus möglich ist, dass alle SVerweise in Spalte F "erfolgreich" sind, muss man in diesem Fall den Fehlerabbruch irgendwie vermeiden und dafür sorgen, dass dann einfach mit dem nächsten Blatt weiter gearbeitet wird.
dafür sorgt das On Error Resume Next
damit dann hinterher wieder der normale Fehlerprozess aktiv ist (Fehlerabbruch mit Fehlermeldung) setzt man das On Error Goto 0
Gruß Daniel

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 10:54:17
Vielen vielen Dank!! :)
Jetzt hab ich noch eine Frage
Geht das auch, dass die Zeilen nur ausgeblendet werden und man sie somit über rechtsklick "Einblenden" wieder einfügen könnte?
Grüße

Bild

Betrifft: AW: Zeilen löschen
von: Daniel
Geschrieben am: 02.11.2015 11:05:08
Hi
geht auch.
in meiner ersten Antwort hatte ich auch beschrieben wie man Zellen ausblendet, einfach dort nochmal nachlesen.
Gruß Daniel

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 11:08:12
Oh stimmt, sorry
Perfekt vielen Dank, es funktioniert!! :)

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 11:33:06
Mir ist doch noch was eingefallen, sorry
Ist es möglich, dass das Makro automatisch ausgeführt wird sobald man auf ein anderes Registerblatt
klickt?

Bild

Betrifft: AW: Zeilen löschen
von: Daniel
Geschrieben am: 02.11.2015 12:41:33
Hi
ja geht auch.
dafür musst du auf das Modul "DieseArbeitsmappe" wechseln.
und ein entsprechendes Event-Makro erstellen.
wähle hierzu in der linken Combobox oberhalb des Codefensters auf "Workbook"
dabei wirt automatsich das Workbook_Open-Eventmakro erstellt, welches du aber wieder löschen kannst.
klicke jetzt in die rechte Combobox. Dort werden dir alle Eventmakros angezeigt, welche für das Workbook zur verfügung stehen. Für dich wäre dass "SheetDeactivate"
wenn du auf den eintrag klickst, wird automatisch dieses Makro mit Kopf- und Endzeile erstellt und du kannst deinen Code dazwischen einfügen.
Dieses Makro läuft immer dann, wenn du einen anderen Reiter anklickst.
Zusätzlich steht dir in diesem Makro die Variable Sh zur verfügung, welche als Objektvariable das Tabellenblatt enthält, welches zu verlassen willst.
Gruß Daniel

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 14:12:03
Vielen Dank, das funktioniert alles :)
Jetzt hab ich nur noch eine Frage und zwar möchte ich mehrere Makros dort einfügen, also dass beide automatisch ausgeführt werden wenn man auf ein anderes Registerblatt klickt?
Das andere Makro lautet:

Sub Zahlenformat()
With Range("A10:A150")
        .NumberFormat = "General"
        .Value = .Value
    End With
End Sub
Hoffe du weißt was ich meine ;)

Bild

Betrifft: AW: Zeilen löschen
von: Esmo
Geschrieben am: 02.11.2015 14:23:27
Moin!
Es gibt auch ein Ereignis "Worksheet Activate".
Gruß
Ralph

Bild

Betrifft: AW: Zeilen löschen
von: Esmo
Geschrieben am: 02.11.2015 14:23:29
Moin!
Es gibt auch ein Ereignis "Worksheet Activate".
Gruß
Ralph

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 14:33:52
Was muss ich da dann machen? Bzw. muss ich da dann etwas anderes auswählen als bei dem vorherigen Makro?

Bild

Betrifft: AW: Zeilen löschen
von: Daniel
Geschrieben am: 02.11.2015 14:37:58
Hi
das muss beides ins gleiche Makro:

Private Sub WieImmderdasMakroauchheisst(...)
hier der Code des ersten Makros (ohne Sub  und End Sub)
hier der Code des zweiten Makros (ohne Sub und End Sub)
End Sub
Gruss Daniel

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 14:42:47
Okay, danke :)

Bild

Betrifft: AW: Zeilen löschen
von: Sonnenblume
Geschrieben am: 02.11.2015 12:35:36
Mir ist doch noch was eingefallen, sorry
Ist es möglich, dass das Makro automatisch ausgeführt wird sobald man auf ein anderes Registerblatt
klickt?

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Zeilen löschen"