Hallo an alle,
ich habe vor etwa zwei wochen angefangen, mich mit Excel VBA zu beschäftigen und hänge nun an einem Problem, das meiner Meinung nicht bestehen dürfte. Ich habe das Problem mal in einem Beispiel zusammengefasst, damit es leichter nachvollziebar ist. Ich möchte einen Bereich auswerten, der wie folgt aussieht:
A B C
xxxx |
01.10.2012 |
01.10.2012 |
xxxx |
02.10.2012 |
02.10.2012 |
xxxx |
03.10.2012 |
03.10.2012 |
yyyyy |
02.10.2012 |
02.10.2012 |
yyyyy |
03.10.2012 |
03.10.2012 |
yyyyy |
04.10.2012 |
04.10.2012 |
yyyyy |
05.10.2012 |
05.10.2012 |
zzzzz |
08.10.2012 |
08.10.2012 |
zzzzz |
09.10.2012 |
09.10.2012 |
zzzzz |
10.10.2012 |
10.10.2012 |
zzzzz |
11.10.2012 |
11.10.2012 |
Dazu gehört folgender Beispielcode:
Option Explicit
Sub test()
Dim m As Integer
For m = 1 To 20
'Schleife wird durchgeführt, bis sich die Einträge in Spalte A
'voneinander unterscheiden
Do Until Cells(m, 1) <> Cells(m + 1, 1)
If Cells(m, 2) < Cells(m + 1, 2) Then 'Zelle m+1 in Spalte B löschen,
Cells(m + 1, 2).Delete ' wenn diese kleiner ist als die vorherige
End If
If Cells(m, 3) < Cells(m + 1, 3) Then ' Zelle m in Spalte C löschen,
Cells(m, 3).Delete 'wenn diese kleiner ist als die vorherige
End If
Cells(m, 1).Delete 'nach erfolgreicher Abfrage wird die
Loop 'entsprechende Zelle in Spalte A auch gelöscht
If Cells(m + 1, 1) = "" Then
Exit For 'Abbruchbedingung, falls am Ende angekommen
End If
Next m
End Sub
Ziel ist es, dass ich am Ende nur noch drei Zeilen übrig behalte, die mir einen Text in Spalte A liefert, in Spalte B das früheste zugehörige Datum und in Spalte C das späteste zugehörige Datum:
xxxx |
01.10.2012 |
03.10.2012 |
yyyyy |
02.10.2012 |
05.10.2012 |
zzzzz |
08.10.2012 |
11.10.2012 |
Das geht mit Sicherheit auch irgendwie einfacher, aber die Ausgangswerte bekomme ich aus einem bereits bestehenden VBA-Programm und möchte sie mit diesem Ziel auswerten. Und was ich nicht ganz verstehe, ist, dass alles funktioniert, bis die Schleife den vorvorletzten Wert erreicht. Bei dem Schritt:
If Cells(m, 2) < Cells(m + 1, 2) Then
Cells(m + 1, 2).Delete
End If
löscht er statt der Zelle in Spalte B die in Spalte C und ich habe nur noch das:
xxxx |
01.10.2012 |
03.10.2012 |
yyyyy |
02.10.2012 |
05.10.2012 |
zzzzz |
08.10.2012 |
10.10.2012 |
zzzzz |
11.10.2012 |
|
Danach stimmt die Ausgabe selbstverständlich nicht mehr.
Es wäre schön, wenn jemand einen Tip hätte, ich weiß nämlich wirklich nicht, was die Falschlöschung verursacht.
Für Hinweise jetzt schonmal vielen, vielen Dank und viele Grüße.
|