Anzeige
Archiv - Navigation
1412to1416
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

VBA Schleife Loeschen von best. Zeilen

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

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.

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

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 !!!

263 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige