Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Schleife Loeschen von best. Zeilen
08.03.2015 08:02:50
best.
Liebes Forum,
ich habe eine Tabelle mit sehr vielen Zeilen in der folgenden Form
Artikelnummer Maschine Fertigungsauftrag Datum Menge Zyklus
Nun soll ein Makro ueber diese Tabelle laufen und zunaechst bei allen Artikeln, die haeufiger als 5x vorkommen, jeweils die Zeilen mit dem aeltesten Datum loeschen, anders ausgedrueckt, es sollen immer nur maximal 5 Artikel mit dem juengsten Datum stehen bleiben.
Die Tabelle ist sortiert nach Artikelnummer und danach nach Datum, die juengsten jeweils unten (kann natuerlich fuer das Makro auch anders sortiert werden).
Ist das moeglich ?
Vielen Dank fuer einen Tipp (eine weitere Frage folgt evt. spaeter dazu)
Stefan

Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Schleife Loeschen von best. Zeilen
08.03.2015 09:00:51
best.
Hallo Stefan,
Du hast die Datei und kannst das Problem damit lösen. Sortiere die Liste nach Artikel Nummer und Datum. Gehe jetzt von hinten nach vorne durch und Prüfe mit Countif die Anzahl der Artikelnummer, falls größer als 5 löschen.

Anzeige
AW: VBA Schleife Loeschen von best. Zeilen
08.03.2015 17:52:50
best.
Hi Hajo,
ich danke Dir sehr für die Antwort, wurden mir ja sogar
schon ganze Codes geliefert, das machts ganz einfach ;)
Lieben Gruß
Stefan

VBA Loeschen spezial
08.03.2015 10:24:51
Erich
Hi Stefan,
so sollte das recht flott gehen:

Option Explicit
Sub DelUeber()
Dim lngQ As Long, arQ, qq As Long, iAnz As Long, rngDel As Range
Const iMax As Long = 5  ' Anzahl Zeilen pro Artikel, die bleiben sollen
With ActiveSheet
lngQ = .Cells(.Rows.Count, 1).End(xlUp).Row
arQ = .Cells(2, 1).Resize(lngQ - 1)
For qq = lngQ - 2 To 1 Step -1
If arQ(qq, 1) = arQ(qq + 1, 1) Then
If iAnz 
Hier wird nur Sp. A (Artikelnr.) betrachtet. Von jedem Artikel bleiben max. die letzten 5 Zeilen stehen.
Das Datum spielt keine Rolle. Die Tabelle sollte also richtig sortiert sein.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: VBA Loeschen spezial
08.03.2015 17:54:33
Stefan
Hi Erich,
fantastisch, herzlichen Dank, werde es gleich morgen in der Firma prüfen und mich
melden. Du bist Dir ja eh schon sicher, dass es klappt :)
Melde mich selbstverständlich und wünsche schönen Restsonntag
Stefan

AW: VBA Loeschen spezial
09.03.2015 14:55:00
Giesarazu
Hi Erich, funzt auf Anhieb genau wie gewünscht !!! perfekte Performance, würde ich sagen :)
Vielen vielen Dank
Stefan

Anzeige
AW: ohne VBA- von Hand (mit VBA sehr schnell)
08.03.2015 12:20:08
Hand
Hi
du kannst die Aufgabe auch ohne Makro mit wenig aufwand lösen:
1. sortiere die Tabelle nach Artikelnummer und Datum - absteigend (dh das jüngste Datum oben!)
2. füge eine erste Hilfsspalte (Spalte G) ein mit folgender Formel in G2:
=Wenn(A2=A1;G1+1;1)
diese Formel zählt die Vorkommen einer Artikelnummer
3. füge in einer zweiten Hilfsspalte (Spalte H) folgende Formel ein, welche alle Zeilen, die gelöscht werden müssen mit 0 markiert und die anderen mit der Zeilennummer, Formel für H2:
=Zeile()*(G2
4. schreibe in H1 (Überschrift der Hilfsspalte) die 0
5. wende auf die ganze Tabelle die Aktion DATEN - DATENTOOLS - DUPLIKATE ENTFERNEN an, mit der Hilfsspalte H als Kriterium und der OPtion "keine Überschrift"
6. Lösche die Hilfsspalten wieder.
damit kannst du die Aufgabe auch bei grössten Datenmengen schnell und einfach von Hand erledigen.
Das ganze geht natürlich auch per Makro:
Sub test()
With ActiveSheet.UsedRange
.Sort key1:=.Cells(1, 4), order1:=xlDescending, Header:=xlYes
.Sort key1:=.Cells(1, 1), order1:=xlAscending, Header:=xlYes
With .Columns(.Columns.Count + 1).Resize(, 2)
With .Columns(1).Offset(1, 0).Resize(.Rows.Count - 1, 1)
.FormulaR1C1 = "=IF(RC1=R[-1]C1,R[-1]C+1,1)"
End With
With .Columns(2)
.FormulaR1C1 = "=Row()*(RC[-1]
Gruß Daniel

Anzeige
AW: ohne VBA- von Hand (mit VBA sehr schnell)
08.03.2015 17:58:34
Hand
Hi Daniel,
ganz toll, gleich beide Lösungen angeboten. Herzlichen Dank für Deine Mühe, werde es morgen in Firma checken und Antwort geben. Der Code sieht ja schon mal selbst für mich fast nachvollziehbar aus.
Bis dahin alles Gute :)
Stefan

AW: ohne VBA- von Hand (mit VBA sehr schnell)
09.03.2015 13:51:01
Hand
eine wirklich pfiffige Lösung, funzt natürlich 100%ig. Hab jetzt erstmal nur die manuelle Variante geprüft, der Code ist ja identisch. Frage mich, warum ich nicht auf solche Ideen komme :(
Jedenfalls nochmals recht herzlichen Dank !!!
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige