4.8k Aufrufe
Gefragt in Tabellenkalkulation von ponscho Mitglied (323 Punkte)
Guten Abend an alle!

Habe ein neues Hobby ;o)
Ich beobachte die deutschen Single Charts und trage die Platzierung, Interpret - Titel, Datum und Kalenderwoche in Excel ein.

Nun haben sich natürlich Interpreten - Titel doppelt und mehrfach angesammelt aber unterschiedlichen Datums. Wie bekomme ich die doppelten jüngsten Datums per Makro automatisch entfernt? Es soll ledeglich der Satz mit dem ältesten Datum (Einstieg in die Charts) stehen bleiben.

Ist das möglich?

SPALTE A = Platzierung
SPALTE B = Interpret - Titel
SPALTE C = Datum
SPALTE D = Kalenderwoche

Bsp.:

92. Sanim - Heater 10.11.2007
19. Santana ft Chad Kroeger - Into The Night 13.10.2007
23. Santana ft Chad Kroeger - Into The Night 10.11.2007
95. Sarah Connor - The Impossible Dream 09.06.2007

nach Bereinigung:

92. Sanim - Heater 10.11.2007
19. Santana ft Chad Kroeger - Into The Night 13.10.2007
95. Sarah Connor - The Impossible Dream 09.06.2007

Internette Grüsse
ponscho

9 Antworten

0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo ponscho,

nachfolgendes Makro sollte das machen, was Du Dir vorgestellt hast. Mit dem Makro wird zunächst die gesamte Auflistung nach Interpreten und dann nach der Kalenderwoche sortiert. Danach werden die doppelten und davon jüngsten Duplikate gelöscht.

Kopiere das Makro in ein StandardModul und starte es z.B. über eine Befehlsschaltfläche
Teste das Makro aber bitte in einer Testdatei und nicht gleich in Deiner Originaldatei.

Option Explicit

Sub Vergleichen()
Dim lngRow As Long
Dim lngRowVergleich As Long
Dim lngLastRow As Long

Application.ScreenUpdating = False

lngLastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'Daten erst nach Interpret, dann nach Kalenderwoche sortieren
ActiveSheet.Range("A1:IV" & lngLastRow).Sort Key1:=ActiveSheet.Range("B2"), Order1:=xlAscending, _
Key2:=ActiveSheet.Range("D2"), Order2:=xlAscending, Header:=xlGuess
'Schleife um Duplikate zu löschen
For lngRow = lngLastRow To 2 Step -1
If ActiveSheet.Cells(lngRow, 2) = ActiveSheet.Cells(lngRow + 1, 2) Then
ActiveSheet.Rows(lngRow).Delete Shift:=xlUp
End If
Next
End Sub
Ich hoffe, Du meintest das so?

Solltest Du nicht wissen, wie Du den Code in Deine Datei bekommst, dann schau mal auf meiner HP in der Rubrik Anleitungen und dort dann in der Anleitungsnummer 3 oder Nr. 16 nach. Dort stelle ich dazu eine bebilderte Anleitung zur Verfügung, die Dir sicherlich helfen wird.

Bei Fragen melde Dich.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
Guten Morgen an alle, guten Morgen Oliver!

Vielen Dank für das Makro und vielen Dank für den Tip mit der Testliste. Hätte ich das Original verwendet, wäre jetzt alles weg ;o)

Das Makro funktioniert gut, aber genau verkehrt herum, es werden die Sätze mit dem ältesten Datum gelöscht. Oder habe ich etwa etwas falsch gemacht?

Hätte da noch eine Frage. Da ich mehrere Tabellenblätter habe, für jedes Jahr eins, wäre es machbar, z.B. auf einer Startseite das Makro einzufügen mit der Abfrage welches Blatt Sortiert werden soll?

Internette Grüsse
Mick
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Mick,

bei mir hat es funktioniert. lade daher bitte Deine Datei mal im Netz, z.B. bei http://www.file-upload.net/ , hoch und teile uns den Downloadlink hier mit. Denn Deine Datei scheint ja anders zu sein als die, die ich mir nachgebaut habe.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
Hallo Oliver!

Hier habe ich mal eine Testdatei hochgeladen.

Habe etwas an Datensätzen der Grösse wegen herausgenommen aber sonst nichts geändert.

Internette Grüsse
Mick
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Mick,

also bei mir funktioniert mein Makro auch in Deiner Beispieldatei.

Ich habe das Makro mal in Deine Beispieldatei eingefügt und 2 bis 3 doppelte Datensätze heraus gesucht und mit gelben Hintergrund markiert, wegen der Übersicht. Die Datensätze mit der ältesten Kalenderwoche habe ich in Spalte F mit einer roten Hintergrundfarbe gekennzeichnet. Wenn Du nun das Makro ausführen läßt, werden alle Datensätze, die am jüngsten sind gelöscht. Übrig bleiben die ältesten Datensätze, zu sehen an der roten Markierung in Spalte F.

Hier noch der Link zu Deiner Datei: http://www.excelbeispiele.de/Beispiele_Supportnet/German-TOP100-Single-Charts---TEST(1).xls

Zu Deiner Frage in AW2: Wie genau stellst Du Dir das vor?

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
Hallo Oliver,

jetzt verstehe ich so langsam ;o) ich glaube wir haben jeder eine andere Auffassung von jung und alt?
Ausgehend von dem Jahr 2009 ist bei mir das älteste Datum der 01.01.2009 und das jüngste der 22.09.2009 und in meiner Tabelle soll das älteste Datum, sprich der 01.01.2009 bleiben und die jüngsten eingetragenen gelöscht werden.


Wie genau stellst Du Dir das vor?


Kann mir das nicht vorstellen, da mir das kompliziert erscheint, aber hatte mir das in etwa so gedacht:

Das auf der Startseite (Tabellenblatt 1) Die Schaltfläche "Vergleichen" eingebettet ist und beim betätigen erstmal die Frage kommt: welches Tabellenblatt soll verglichen werden? dann beim eingeben oder auswählen das entsprechende Tabellenblatt sortiert wird. Ungefähr so.
Wenn's nicht machbar ist, wär's auch nicht so schlimm.

Internette Grüsse
Mick
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Mick,

lade Dir unter dem Link aus AW 5 nochmal Deine Datei herunter. Darin sollte nun alles enthalten sein.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
0 Punkte
Beantwortet von ponscho Mitglied (323 Punkte)
Hallo Oliver,

Oh ja, vielen Dank hätte nicht gedacht, dass es mit der Abfrage klappt. Nochmals vielen Dank für Deine Geduld, Mühe und das hervoragend funktionierende Makro.

Internette Grüsse
Mick
0 Punkte
Beantwortet von coros Experte (4k Punkte)
Hallo Mick,

gerne geschehen. Danke auch für die Rückmelung.

MfG,
Oliver
[sub]Da hier der einzige Lohn für die Helfer eine Rückmeldung ist, wäre es nett, wenn Du[/sub]
[sup] ein Feedback abgeben könntest, ob der Lösungsvorschlag Dein Problem gelöst hat.[/sup]
...