Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
928to932
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
928to932
928to932
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

einmalvorkommende Werte Filtern

einmalvorkommende Werte Filtern
28.11.2007 17:20:43
heinzs
Hallo,
ich möchte in einer Exceltabelle filtern nach einer Spalte. Es sollen nur in dieser Spalte genau einmal vorkommende Werte gefiltert werden, damit ich diese im nächsten Schritt löschen kann. Es sollen nur mehrfachvorkommende Werte stehen bleiben.
Vielen Dank für Hilfe
Heinz

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: einmalvorkommende Werte Filtern
28.11.2007 17:36:32
Peter
Hallo Heinz,
was hälst du vom nachfolgenden Makro?

Public Sub Einzelne_raus()
Dim lZeile  As Long
With Worksheets("Tabelle1")
For lZeile = 1 To .Cells(Rows.Count, 1).End(xlUp).Row
If Application.WorksheetFunction.CountIf(Columns(1), Range("A" & lZeile).Value) = 1  _
Then
.Rows(lZeile).Delete Shift:=xlUp
End If
Next lZeile
End With
End Sub


Gruß Peter

AW: einmalvorkommende Werte Filtern
28.11.2007 20:33:00
Daniel
Hi
warum so umständlich?
so geht idR. Schneller:
- in einer freien Spalte folgende Formel eintragen, durch sie erhalten alle Zeilen, die gelöscht werden sollen, den Wert WAHR, die anderen die ZeilenNr.
=wenn(zählenwenn(A:A;A1)=1;wahr;Zeille())
- Formeln durch werte ersetzen und bei grossen Datenmengen noch nach der Hilfsspalte sortieren
- die Hilfsspalte markieren und mit BEARBEIEN - GEHE ZU - INHALTE - KONSTANTEN - WAHRHEITSWERTE die zu löschenden Zellen auswählen und dann GANZE ZEILE löschen.
das könnte bei grösseren Datenmengen und u.U. auch von Hand schneller gehten, als deine Schleife.
als fertiges Makro siehts dann so aus:

Sub Löschen():
With Range("IV1:IV" & Range("A65536").End(xlUp).Row)
.FormulaLocal = "=wenn(Zählenwenn(A:A;A1)=1;wahr;Zeile())"
.Formula = .Value
.EntireRow.Sort key1:=Range("iv1"), order1:=xlAscending, header:=xlNo
On Error Resume Next
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
On Error GoTo 0
.EntireColumn.Delete
End With
End Sub


Gruß, Daniel

Anzeige
AW: noch schneller
28.11.2007 22:23:12
Daniel
geht das ganze, wenn man die Originaldaten vor dem löschen sortieren kann.
ZählenWenn ist nämlich sehr langsam, wesentlich schneller wird das ganze, wenn ich nach dem sortieren einfach nur prüfen muss, ob der Wert sich vom Wert drüber UND vom Wert drunter unterscheidet.
wenns mal mehrere Tausend Datensätze sind, sollte man ZählenWenn grundsätzlich vermeiden und in Makros viel mit sortien arbeiten (das geht immer schnell)

With Range("iv2:iv" & Range("A65536").End(xlUp).Row)
Range("a1").CurrentRegion.Sort Range("A1")
.FormulaLocal = "=wenn(und(a2a3;a1a2);wahr;Zeile())"
.Formula = .Value
.EntireRow.Sort key1:=Range("iv2"), order1:=xlAscending, header:=xlNo
.SpecialCells(xlCellTypeConstants, 4).EntireRow.Delete
.EntireColumn.Clear
End With


das ist bei 10000 ZEilen (davon jede 2. zu löschen) c.a. 80x schneller als meine erste Variante mit Zählen wenn.
Gruß, Daniel

Anzeige
AW: noch schneller
29.11.2007 08:36:00
heinzs
Hallo,
vielen Dank für Eure Hilfe, da das ganze nicht zeitkritisch ist, habe ich mich für die Version mit "Zählewenn" entschieden. Es klappt wunderbar.
Nochmals vielen Dank!
Heinz

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige