Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1500to1504
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

Fehler im VBA

Fehler im VBA
10.07.2016 17:31:18
KiBi
Hallo,
ich habe in VBA einen Code erstellt, der Dubletten löscht und anschließend nach Datum sortiert. Irgendwo scheint allerdings noch ein Fehler zu sein. Kann sich das vielleicht mal jemand ansehen. Wäre echt super. vielen Dank!!!
Als Info vorab: Spalte C ist der Name nach dem die Dubletten gesucht werden
Spalte D ist das Zugriffsdatum. Das jüngste Datum soll dabei stehen bleiben (also ältere Einträge sollen entfernt werden).
vielen, vielen Dank!! Ich bekomms einfach nicht hin :-/
----------------------------------------
Private Sub CommandButton1_Click()
Dim reihe As Long
Dim i As Long
i
'-Letze beschriebene Zeile in Spalte D finden
i = 3
Do
If ActiveSheet.Cells(i, 4)  "" Then
i = i + 1
End If
Loop Until ActiveSheet.Cells(i, 4) = ""
i = i - 1
'-Erst nach Namen (spalte C), dann nach Zugriff (spalte D) Sortieren. Letzter Zugriff oben
Range(Cells(1, 1), Cells(i, 9)).Select
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Key2:=Range("D1") _
, Order2:=xlAscending, Header:=xlGuess, OrderCustom:=1, MatchCase:= _
False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, DataOption2 _
:=xlSortNormal
'- Überprüft, ob sich in Spalte C zwei gleiche Namen befinden. Der ältere Eintrag wird
'- gelöscht
reihe = 1
Do
If Cells(reihe, 3) = Cells(reihe + 1, 3) Then
If Cells(reihe, 4) >= Cells(reihe + 1, 4) Then
Rows(reihe + 1).Select
Selection.Delete Shift:=xlUp
End If
End If
reihe = reihe + 1
Loop Until Cells(reihe, 1) = ""
'- Nach Zugriffsdatum sortieren. Letzer Zugriff oben
Range(Cells(1, 1), Cells(i, 9)).Select
Selection.Sort Key1:=Range("D1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler im VBA
10.07.2016 19:05:20
Matthias
Hallo Kibi! Also ohne die Datei zu sehen und die genauen Daten wird es schwierig. Was passt dein eigentlich nicht? Vg Matthias

AW: Fehler im VBA
10.07.2016 19:08:23
fcs
Hallo KiBi,
2 Probleme in deinem Code:
1. wenn das jüngste Datum (=größter Zahlenwert) zuerst stehen soll, dann muss man absteigend sortieren.
2. Wenn Zeilen gelöscht werden, dann muss die Liste von unten nach oben abgearbeitte werden, sonst kommt der Zeilenzähler durcheinander.
Nachfolgend dein Makro angepasst.
Gruß
Franz
Private Sub CommandButton1_Click()
Dim reihe As Long
Dim i As Long
'-Letze beschriebene Zeile in Spalte D finden
i = 3
Do
If ActiveSheet.Cells(i, 4)  "" Then
i = i + 1
End If
Loop Until ActiveSheet.Cells(i, 4) = ""
i = i - 1
'-Erst nach Namen (spalte C), dann nach Zugriff (spalte D) Sortieren. Letzter Zugriff oben
Range(Cells(1, 1), Cells(i, 9)).Sort Key1:=Range("C1"), Order1:=xlAscending, _
Key2:=Range("D1"), Order2:=xlDescending, Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal, _
DataOption2:=xlSortNormal
'- Überprüft, ob sich in Spalte C zwei gleiche Namen befinden. Der ältere Eintrag wird
'- gelöscht
reihe = i
Do
If Cells(reihe, 3) = Cells(reihe - 1, 3) Then
If Cells(reihe - 1, 4) >= Cells(reihe, 4) Then
Rows(reihe).Delete Shift:=xlUp
End If
End If
reihe = reihe - 1
Loop Until reihe = 1
'- Nach Zugriffsdatum sortieren. Letzer Zugriff oben
Range(Cells(1, 1), Cells(i, 9)).Sort Key1:=Range("D1"), Order1:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
End Sub

Anzeige
AW: Fehler im VBA
10.07.2016 19:14:57
KiBi
Hallo Franz,
hier eine Beispieldatei
https://www.herber.de/bbs/user/106897.xlsx
Die Sortierfunktion nach Datum funktioniert meiner Ansicht nach.
Allerdings werden die Dubletten nicht entfernt.
Folgende Schritte sollten mit Drücken des Buttons ausgeführt werden:
1. Sortieren nach Spalte C (Suchbereich bis zur letzten beschriebenen Zeile in Spalte D)
2. Sortieren nach Spalte D
3. Entfernen von Dubletten auf Basis von Spalte C (das jüngste Datum bleibt bestehen, die älteren Einträge werden entfernt)
4. Sortieren nach Spalte D aufsteigend.
Was ich auch noch nicht hinbekommen habe ist, dass die Output Daten in ein neues Tabellenblatt exportiert werden.
Vielen Dank für deine Hilfe

Anzeige
AW: Fehler im VBA
10.07.2016 19:24:26
KiBi
Hallo,
vielen Dank, ich glaube es funktioniert jetzt!!! Eine Frage noch, wie bekomme ich es hin, dass die Output Daten in ein neues Tabellenblatt extrahiert werden?
vielen lieben Dank!!

AW: Fehler im VBA
10.07.2016 22:00:05
snb
So geht das blitzschnell:
Sub M_snb()
sn = Tabelle1.Cells(1).CurrentRegion
With CreateObject("scripting.dictionary")
For j = 1 To UBound(sn)
If .exists(sn(j, 3)) Then
st = .Item(sn(j, 3))
If (sn(j, 4)) 

AW: Fehler im VBA
10.07.2016 22:12:17
Werner
Hallo,
erst nach Spalte D absteigend sortieren, damit das neueste Datum oben steht. (kannst du ja mit dem Rekorder aufzeichnen)
Danach dann
ActiveSheet.Range("$A$1:$G$1900").RemoveDuplicates Columns:=3, Header:=xlYes
Dabei bleibt immer der erste Treffer stehen, was du ja willst. Den Bereich mußt du an deine Bedürfnisse anpassen.
Jetzt nach deinen Wünschen sortieren.
Gruß Werner
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige