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

Spezielle Filterung

Spezielle Filterung
11.02.2008 07:26:00
Hahn,
Guten Morgen,
ich hoffe, dass mir hier jemand weiterhelfen kann!?!
Ich muss eine bestehende Liste mit mehreren 100 Zeilen filtern.
Der Aufbau der Tabelle sieht wie folgt aus:
1. Zeile: 2007 29 10
2. Zeile: 2007 29 20
3. Zeile: 2007 11 10
4. Zeile: 2007 31 10
5. Zeile: 2007 31 20
In Spalte A ist das Jahr zu ersehen, die Spalte B ist ein Aktenzeichen (fortlaufende Zahl in einem Jahr) und Spalte C beschreibt den Zustand der Akte (10 Aktenzeichen wurde angelegt; 20 Akte wurde geschlossen).
Aus dieser Liste möchte ich alle "Akten" rausfiltern bzw. löschen, die angelegt und geschlossen wurden.
D.h. in dem Bespiel dürfte nur noch die Zeile 3 übrigt bleiben, da diese mit dem Eintrag 10 nur angelegt wurde, aber nicht mit einer zusätzlichen Zeile (2007;11;20) geschlossen wurde.
Danke für eure Hilfe im Voraus!
Gruß Yvonne

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Spezielle Filterung
11.02.2008 07:47:00
Beverly
Hi Yvonne,
kommt nur das Jahr 2007 vor und sind die Daten so sortiert, dass die doppelten Werte in Spalte B auf einander folgen? Dann kannst du es mit diesem Code versuchen

Sub leoschen()
Dim loZeile As Long
Dim raZeile As Range
For loZeile = 1 To IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row,  _
Rows.Count)
If Cells(loZeile, 2) = Cells(loZeile + 1, 2) Then
If raZeile Is Nothing Then
Set raZeile = Union(Rows(loZeile), Rows(loZeile + 1))
Else
Set raZeile = Union(raZeile, Rows(loZeile), Rows(loZeile + 1))
End If
loZeile = loZeile + 1
End If
Next loZeile
If Not raZeile Is Nothing Then raZeile.Delete
End Sub




Anzeige
AW: Spezielle Filterung
11.02.2008 08:16:00
Hahn,
Hallo Karin,
danke für die schnelle Antwort.
Leider kommt nicht nur das Jahr 2007 vor.
Die doppelten Einträge in Spalte B folgen derzeit nicht auf einander, können aber natürlich sortiert werden.
LG, Yvonne

AW: Spezielle Filterung
11.02.2008 08:28:00
Beverly
Hi Yvonne,
dann sollte es mit diesem Code gehen

Sub leoschen()
Dim loZeile As Long
Dim raZeile As Range
For loZeile = 1 To IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row,  _
Rows.Count)
If Cells(loZeile, 1) = Cells(loZeile + 1, 1) And Cells(loZeile, 2) = Cells(loZeile + 1,  _
2) Then
If raZeile Is Nothing Then
Set raZeile = Union(Rows(loZeile), Rows(loZeile + 1))
Else
Set raZeile = Union(raZeile, Rows(loZeile), Rows(loZeile + 1))
End If
loZeile = loZeile + 1
End If
Next loZeile
If Not raZeile Is Nothing Then raZeile.Delete
End Sub




Anzeige
AW: Spezielle Filterung
11.02.2008 08:36:00
Hahn,
Hi Karin,
ich danke dir! Super, das funktioniert. Jetzt muss ich nur noch den Code verstehen.
Wünsche noch einen schönen Tag.
Gruß Yvonne

AW: Spezielle Filterung
11.02.2008 09:17:21
Beverly
Hi Yvonne,
hier der Code noch mal mit einigen Kommentaren zum besseren Verständnis. Ich habe außerdem noch eine Zeile ergänzt, in der die Variable vor dem Beenden der Prozedur gelöscht wird. Das sollte man immer tun.

Sub leoschen()
Dim loZeile As Long     ' Schleifenzähler
Dim raZeile As Range    ' Variable für die Löscheilen
'   Schleife über alle Zeilen in Spalte A bis zur letzten belegten
For loZeile = 1 To IIf(IsEmpty(Cells(Rows.Count, 1)), Cells(Rows.Count, 1).End(xlUp).Row,  _
Rows.Count)
'       Wert in aktueller Zeile und nächstfolgender Zeile in Spalte A und B sind identisch
If Cells(loZeile, 1) = Cells(loZeile + 1, 1) And Cells(loZeile, 2) = Cells(loZeile + 1,  _
2) Then
'           Variable für die Löschzeilen ist noch leer
If raZeile Is Nothing Then
'               aktuelle und nächstfolgende Zeile auf Variable schreiben
Set raZeile = Union(Rows(loZeile), Rows(loZeile + 1))
Else
'               aktuelle und nächstfolgende Zeile zu den bereits in der Variablen
'               vorhandenen Zeilen hinzuschreiben
Set raZeile = Union(raZeile, Rows(loZeile), Rows(loZeile + 1))
End If
'           Schleifenzähler um 1 erhöhen, da die nächstfolgende Zeile bereits erfasst wurde
loZeile = loZeile + 1
End If
Next loZeile
'   alle Zeilen gemeinsam löschen wenn die Variable nicht leer ist
If Not raZeile Is Nothing Then raZeile.Delete
'   Variable leeren
Set raZeile = Nothing
End Sub




Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige