Anzeige
Archiv - Navigation
1568to1572
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

If Not Funktion

If Not Funktion
18.07.2017 12:40:28
Lisa
Hallo,
folgenden Code habe ich benutzt, um alle Zeilen zu löschen, in denen nicht eine der vier Bedinungen erfüllt ist.
Leider funktioniert es nicht - ist was mit dem Code falsch oder kann es auch daran liegen, dass die Datei sehr groß ist?

Sub DelRows()
Dim lngLastRow As Long
Dim i As Long
lngLastRow = ActiveCell.SpecialCells(xlLastCell).Row
For i = lngLastRow To 1 Step -1
If Not (Cells(i, 3) = 67760 Or Cells(i, 3) = 10108939 Or Cells(i, 1).Value = "APO"
Or Cells(i, 1).Value = "HST")
Then
Cells(i, 1).EntireRow.Delete
End If
Next
End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: If Not Funktion
18.07.2017 12:52:42
mmat
Hallo,
was funktioniert nicht?
- Löscht keine Zeilen
- Löscht die falschen Zeilen
- Stürzt ab
- Bringt die Tastatur zum schmelzen :-)
Das hier würde ich so nicht schreiben, steht da bei dir die richtige Zeile drin?
lngLastRow = ActiveCell.SpecialCells(xlLastCell).Row
vg, MM
AW: If Not Funktion
18.07.2017 13:06:52
Lisa
Hallo MM,
lngLastRow = ActiveCell.SpecialCells(xlLastCell).Row
steht bei mir auch, da die Datei immer verschieden groß ist und es keine feste lezte Zeile gibt.
Der Bildschrim flackert nur, aber passieren tut nichts.
LG
AW: If Not Funktion
18.07.2017 13:17:28
mmat
Hallo Lisa,
ja klar, vermutlich liegt es daran
Füge eine Zeile hinzu:
msgbox cstr(lngLastRow)
Die Msgbox sollte nun eine Zahl ausspucken, die deiner letzten Zeile entspricht.
Ich würde das Thema mit der letzten Zeile so lösen:
Irgendwo muß es eine Spalte geben, in der immer etwas drinsteht. Meistens ist dies die Spalte A
Dann würde mein Code lauten:
lngLastRow = cells (65500, 1).end(xlup).Row
Falls du mehr Zeilen hat wie 65500 dann muß hier natürlich ein größerer Wert stehen.
vg, MM
Anzeige
AW: If Not Funktion
18.07.2017 13:46:51
Lisa
Hallo MM,
habe deinen Rat befolgt, meine letzte Zeile ist 275693. Aber außer flackern passiert immer noch nichts.... liegt es vielleicht wirklich an der Datei-Größe?
Textzahlen ?
18.07.2017 13:53:12
Werner
Hallo Lisa,
mal eine Frage, hast du auch echte Zahlen in deinen Zellen stehen und nicht Text, der nur wie Zahlen aussieht?
Prüfe mal mit:=ISTZAHL(A1)
A1 musst du halt mit der entsprechenden Zelle ersetzen. Wenn da eine echte Zahl drin steht sollte das Ergebnis WAHR sein.
Gruß Werner
AW: If Not Funktion
18.07.2017 14:04:34
mmat
Hallo Lisa
den folgenden Code hab ich bei mir getestet, alle Zeilen mit den genannten Werten bleiben stehen. Beachte bitte, dass dieser in einem allgemeinen Modul stehen muß, nicht im Code eines Arbeitsblatts.
Sub DelRows()
Dim lngLastRow As Long
Dim i As Long
lngLastRow = Cells(1000000, 1).End(xlUp).Row
For i = lngLastRow To 1 Step -1
If Not (Cells(i, 3) = 67760 Or Cells(i, 3) = 10108939 Or Cells(i, 1).Value = "APO" Or Cells(i, _
1).Value = "HST") Then Rows(i).Delete
Next
End Sub
vg, MM
Anzeige
AW: If Not Funktion
18.07.2017 14:28:23
Lisa
Hallo MM
Achso, das ändert natürlich einiges :-)
Ich lass es jetzt mal durchrattern! Vielen Dank für deine Hilfe!
LG
Autofilter wäre ja viel schneller ...
18.07.2017 14:34:09
lupo1
... mal eben angemerkt. Bei den Mengen!
Oder auch Spezialfilter.
AW: If Not Funktion
18.07.2017 14:48:00
mmat
Hallo Lisa,
sach mal ob's geklappt hat.
Wenn irgendwas von deinen Bedingungen schiefgeht ("APO" und "Apo" ist was anderes), dann muß am Ende ein "zuviele Zeilen gelöscht" rauskommen, aber net "ich mach garnix"
vg, MM
Einzelschrittmodus
18.07.2017 12:54:40
lupo1
MsgBox (Cells(i, 3) = 67760 Or Cells(i, 3) = 10108939 Or Cells(i, 1).Value = "APO"
Or Cells(i, 1).Value = "HST")
mal statt If testen
AW: Einzelschrittmodus
18.07.2017 13:34:02
Peter
Hallo Lisa
Probier mal:
Dim lngLastRow As Long
Dim i As Long
lngLastRow = ActiveCell.SpecialCells(xlLastCell).Row
MsgBox lngLastRow
For i = lngLastRow To 1 Step -1
If Not (Cells(i, 3) = 67760 Or Cells(i, 3) = 10108939 Or Cells(i, 1).Value = "APO" _
Or Cells(i, 1).Value = "HST") Then Rows(i & ":" & i).Delete
End If
Next
Viele Grüße
Peter (hpo)
Anzeige
AW: If Not Funktion
18.07.2017 18:00:49
Daniel
Hi
bei der genannten Datenmenge ist es nicht mehr sinnvoll, jede Zeile einzeln zu löschen.
Das dauert sehr lange, weil das Zeilenlöschen ein sehr komplexer Vorgang für Excel ist.
Auch das Löschen über den Autofilter würde nur dann eine zufriedenstellende Laufzeit erbringen, wenn du die Datei vor dem Löschen nach den Filterspalten sortierst, so dass die zu löschenden Zeilen möglichst lückenlos bei einander stehen.
ohne Umsortieren wäre wahrscheinlich folgendes die beste lösung:
1. markiere in einer Hilfsspalte per Formel alle Zellen, die gelöscht werden sollen mit 0 und alle Zeilen, die stehen bleiben müssen, mit der aktuellen Zeilennummer.
in deinem Fall wäre die Formel
=Wenn(Oder(A1="APO";A1="HST";C1=67760;C1=10108939);Zeile();0)
2. Schreibe in die Überschriftenzeile ebenfalls die 0
3. Wende auf die Ganze Tabelle die Funktion Daten - Datentools - Duplikate entfernen an, mit der Hilfsspalte als Kriterium und der Option "keine Überschrift"
4. lösche die Hilfsspalte
das ganze geht natürlich auch als Makro:
Sub löschen()
With ActiveSheet.UsedRange
With .Columns(.Columns.Count + 1)
.FormulaR1C1 = "=IF(Or(RC1=""APO"",RC1=""HST"",RC3=67760,RC3=10108939),Row(),0)"
.Cells(1, 1).Value = 0
.EntireRow.RemoveDuplicates .Column, xlNo
.ClearContents
End With
End With
End Sub
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige