Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1360to1364
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

Zellinhalt löschen

Zellinhalt löschen
19.05.2014 09:58:45
traktorjoe
Guten Morgen zusammen,
ich doktore nun schon seit ein paar Stunden an einem (eigentlich recht simplen) Makro herum. Und zwar hab ich ein recht großen Tabellenblatt (3000 Zeilen, 500 Spalten), welches entweder Werte anzeigt oder #NV über IstFehler ausblendet. Nun möchte ich genau jene Zellen löschen (genauer gesagt, nur den Inhalt - also die Formel), welche keine Werte anzeigen, in denen also implizit ein #NV steht.
Ich hab das bislang über zwei (die zweite Version ist die auskommentierte for-each-Schleife) verschiedene Herangehensweisen versucht. Vorweg: ich hab die Makro "im Kleinen" ausprobiert, dort haben sie wunderbar funktioniert.
Sub Formula_delete_2()
Dim LastRow As Integer
Dim LastCol As Integer
Dim cell As Object
With Worksheets("Mappe1")
Application.DisplayAlerts = False
Application.ScreenUpdating = False
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
LastCol = Cells(3, Columns.Count).End(xlToLeft).Column
'For Each cell In Range(Cells(4, 2), Cells(LastRow, LastCol))
'    If cell.Value = "" And Not IsNumeric(cell) Then
'    cell.Clear
'    End If
'Next cell
For Row = 4 To LastRow
For Col = 2 To LastCol
If Cells(Row, Col).Value = "" And Not IsNumeric(Cells(Row, Col)) Then
Cells(Row, Col).ClearContents
End If
Next Col
Next Row
End With
End Sub

Führe ich das Makro in der obigen Version aus, bricht er irgendwann ab und meint dass If Cells(Row, Col).Value = "" And Not IsNumeric(Cells(Row, Col)) Then nicht kompatibel sei. Komischerweise werden die ersten paar Spalten allerdings ordnungsgemäß durchlaufen und löscht dort auch betreffende Zellen.
Für ich das Makro mit der for-each-Schlweife aus, hängt er sich auf. Sprich es passiert gar nicht, sodass ich nach ner halben Stunde die Reißleine ziehen muss und Excel über den Task-Manager schließe.
Hat vielleicht einer eine Idee, was an den Codes falsch sein könnte oder hat mir vielleicht eine ganz andere Herangehensweise?
Vielen Dank und beste Grüße!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Zellinhalt löschen
19.05.2014 10:12:59
Daniel
Hi
wenn du Formeln mit Fehlerwert löschen willst, kannst du auch so vorgehen:
1. alle Zellen selektieren
2. selektion auf Zellen mit Fehlerwert reduzieren mit
Start - Bearbeiten - Suchen und Auswählen - Inhalte - Formeln - Fehlerwerte
3. Zellinhalte leeren
sieht als Code so aus:
Cells.SpecialCells(xlcelltypeformulas, 16).ClearContents

Gruß Daniel

AW: Zellinhalt löschen
19.05.2014 10:20:05
traktorjoe
Hi Daniel,
danke für deine schnelle Antwort.
Den Trick kannte ich noch nicht, bringt mir allerdings in dem Fall auch nicht, da so gesehen keine Fehlerwerte in der Mappe vorhanden sind. Diese habe ich ja IstFehler ausgeblendet. Wenn ich den Code ausführe, bringt er mir auch, dass er keine Zelle findet.
Es geht mir mehr darum, den Inhalt jener Zellen zu löschen, welche leer sind (zwar eine Formel drinsteht, aber kein Wert angezeigt wird) und nicht numerisch sind (ist eigentlich nur zur Sicherheit, könnte man auch weglassen).
Viele Grüße

Anzeige
AW: Zellinhalt löschen
19.05.2014 10:24:00
Daniel
Wolltest du nicht die Zellen löschen, in denen ein #NV drin steht?
zumindest habe ich deine Anfrage so verstanden.
wie sehen denn deine Formeln aus?
ändere deine Formeln so ab, das diejenigen die gelöscht werden sollen, nicht "leer" anzeigen, sonden einen Fehler (kann man mit der Funktion NV() erzeugen oder mit 1/0), dann kannst du sie wie beschrieben löschen.
Gruß Daniel

AW: Zellinhalt löschen
19.05.2014 10:32:52
traktorjoe
Sorry, hatte mich vielleicht ein wenig schlecht ausgedrückt.
Leider kann ich die Formeln nicht so leicht abändern, sie sehen wie folgt aus:
=WENN(ISTFEHLER(SVERWEIS($A3263;BEREICH.VERSCHIEBEN(Data!$A:$G;0;VERGLEICH(G$3;Data!$1:$1;0)-1);5; FALSCH));"";SVERWEIS($A3263;BEREICH.VERSCHIEBEN(Data!$A:$G;0;VERGLEICH(G$3;Data!$1:$1;0)-1);5;FALSCH) )
Die Tabelle hat wie gesagt rund 1 Million relevante Zellen, da kann ich die Formeln nicht ändern.
Ich brauch quasi ein Makro, mit welchem ich Zellen adressieren kann, die zwar eine Formel aber keinen Wert enthalten.
Sorry, nochmals für das Missverständnis...

Anzeige
AW: Zellinhalt löschen
19.05.2014 10:42:55
Daniel
1. eine Zelle mit Formel enthält immer einen wert, sie kann nicht leer sein, weil sie ja eine Formel enthält. Wenn das Formelergebnis leer aussieht, dann ist idR der Leerstring "" und das ist ein Text
2. natürlich kannst du die Formel leicht abändern, du bist nur zu faul dafür, schhließlich hast du die Formel explizit so abgeändert, dass eben KEIN Fehler entsteht, sondern im Fehlerfall der Leerstring anzgezeigt wird.
Das Problem ist nur, dass Excel keine Möglichkeit bietet, gezielt Zellen mit Leerstring als Ergebnis auszuwählen (höchsten über den Autofilter, wenn die Formeln in einer Spalte stehen), weil der Leerstring ein Text ist.
wenn du den Fehler zulässt, indem du den WENNFEHLER-Teil der Formel weglässt und nur den SVERWEIS verwendest, dann kannst du die Formeln mit einem Fehler als Ergebis, dann kannst du die Fehlerwerte wie beschrieben löschen.
Allerdings das kein guter Stil, in einer Tabelle sollen, wenn Formeln verwendet werden, alle Zellen einer Spalte dieselbe Formel verwenden.
gruß Daniel

Anzeige
AW: Zellinhalt löschen
19.05.2014 10:53:06
traktorjoe
Faulheit ist hier leider nicht das Problem, da ich diverse Zellen in dem Tabellenblatt bereits abgeändert habe und diese Änderungen somit zerstören würde, wenn ich die Formel neu rüberziehe....
Ich finde es einfach nur komisch, dass ich im Minimalbeispiel genau diese Zellen mit dem Leerstring durch Cells.Value ="" ansprechen und entsprechend deren Inhalt lösche konnte und dies nun in der eigentlichen Tabelle nicht mehr funktioniert.

AW: Zellinhalt löschen
19.05.2014 11:01:20
Daniel
Hi
dazu müsste man deine Tabelle kennen.
die Abfrage mit dem IsNumeric ist nicht erforderlich.
allerdings ist so eine Schleife über einzelne Zellen immer sehr langsam.
Gruß Daniel

Anzeige
AW: Zellinhalt löschen
19.05.2014 11:17:35
traktorjoe
Die Abfrage mit IsNumeric hatte ich nur zur Sicherheit drin und hab sie auch schon mal rausgeschmissen, was aber leider auch keinen Erfolg brachte.
Ich würde euch liebend gerne die Tabelle zur Vefügung stellen, kann diese aber nicht hochladen, da sie auf die 100mb zugeht.
Hab dafür ein Minimalbeispiel hochgeladen:
https://www.herber.de/bbs/user/90730.xlsx
Ich vermute, der Fehler kommt zustande, da der Code für die Größe der Mappe einfach zu "schlecht", sprich zu rechenintensiv ist.

AW: Zellinhalt löschen
19.05.2014 12:05:19
Daniel
da hast du natürlich recht.
SVerweis und Vergleich sind sehr langsam, wenn letzte Paramerter = 0 bzw FALSCH ist.
setzt du diesen Parameter = 1 bzw WAHR, wird das ganze um Welten! schneller, allerdings muss dann die jeweiligen Tabelle nach der Suchspalte aufsteigend sortiert sein.
Ebenso ist Bereich.Verschieben in grossen Tabellen sehr ungünstig, insbesondere, wenn es mit Langsamen Formeln wie SVerweis mit 4. Parameter = 0 kombiniert wird.
Warum und wieso steht hier: http://www.online-excel.de/excel/singsel.php?f=171
Wenn möglich solltest du statt Bereich.Verschieben zu verwenden, den Zellbereich mit Hilfe der INDEX-Funtkion berechnen.
ausserdem sollte man sich überlegen, ob bei so riesentabellen permanente Funktionen überhaupt notwendig sind oder obs nicht besser ist, für eine Datenaktualisierung die Formeln kurzzeitig per Code einzufügen und nach Berechnung die Formeln durch ihre Werte zu ersetzen.
Gruß Daniel

Anzeige
AW: Zellinhalt löschen
19.05.2014 22:23:12
traktorjoe
Hey Daniel,
ich stimme dir zu allen genannten Punkten zu und werde das bei den kommenden Projekten beherzigen.
Das aktuelle Problem hat sich übrigens erledigt - musste vorher länger weg und hab einfach mal die for-each-Schleife angeworfen und siehe es hat funktioniert. Dauere halt nur ein Weilchen.
Dennoch vielen Dank für deine Hilfe und die wertvollen Ratschläge!
Grüße

AW: Zellinhalt löschen
19.05.2014 10:17:03
hary
Moin
Wenn in der Zelle #NV steht.
Sub wech()
Dim LastRow As Integer
Dim LastCol As Integer
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
LastCol = Cells(3, Columns.Count).End(xlToLeft).Column
Range(Cells(4, 2), Cells(LastRow, LastCol)).SpecialCells(xlFormulas, 16).ClearContents
End Sub

gruss hary

Anzeige
AW: Zellinhalt löschen
19.05.2014 10:21:11
traktorjoe
Moin Hary,
siehe meine letzter Post. Leider sind alle NVs ausgeblendet und ich kann diese nicht mehr so einfach einblenden.
Gruß

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige