1.6k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.3k Punkte)
Hallo,

ich möchte mittels einer Schleife aus einer vorgegebenen Tabelle mit drei Spalten (7,9,10) und enthaltenen Duplikaten nur die Datensätze ohne ihr Duplikat in ein Array übernehmen (ich kann aber in der Quelldatei nicht vorab die Duplikate löschen!).
Ich möchte also vor der Aufnahme in das Array prüfen, ob dieser Datensatz bereits enthalten ist.

For i = 3 To lngEnde
If IsError(Application.Match(Cells(i, 7) & Cells(i, 9) & Cells(i, 10), arrSpeicher, 0)) Then
arrSpeicher(0, i - 3) = Cells(i, 7)
arrSpeicher(1, i - 3) = Cells(i, 9)
arrSpeicher(2, i - 3) = Cells(i, 10)
'MsgBox arrSpeicher(0, 0) & arrSpeicher(1, 0) & arrSpeicher(2, 0)
End If
Next

Leider funktioniert meine If-Abfrage so nicht! Kann mir jemand einen Tipp geben, wie's funktionieren könnte?
Danke und Gruß A.

8 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^

nutze dafuer den spezialfilter (Option ohne duplikate)
und erfasse dann die Daten mit einem Array
spezialfilter zurueckgesetzt ,fertig ^^

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^

Makroaufnahme gibt dir den benötigten code
dieser muss aber optimiert werden

gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^

ein Beispiel

gruss nighty

Range("A:A").AdvancedFilter Action:=xlFilterInPlace, Unique:=True
TagD = Range("A2:A" & ActiveSheet.Range(Cells(Rows.Count, 1), Cells(Rows.Count, 1)).End(xlUp).Row)
Range("A:A").AdvancedFilter Action:=xlFilterInPlace, Unique:=False
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hi nighty (arrSpezialist!),
danke, klingt kompliziert, weil ich das noch nicht probiert hatte aber ich versuch's...!
Gruß A.
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Ahorn ^^

eine weitere variante
hab aber keine zetmessungen vorgenommen welche variante die schnellere ist

gruss nighty

Sub KeineDoppelten()
Dim DeinArr As Variant
Dim objDic As Object
Dim ZeilenIndex As Long
Set objDic = CreateObject("scripting.dictionary")
DeinArr = Range("A1:A6")
For ZeilenIndex = 1 To UBound(DeinArr)
objDic(DeinArr(ZeilenIndex, 1)) = 1
Next
Range("B1").Resize(objDic.Count) = WorksheetFunction.Transpose(objDic.keys)
Set objDic = Nothing
End Sub
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

obwohl dic objecte richtig schnell sind
würde ich dennoch sagen das der spezialfilter in diesem fall schneller ist
vom bauchgefühl her *g*
gruss nighty
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi all ^^

ursprungscode war von einem anderen netten user :-)

gruss nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.3k Punkte)
Hi,

die zweite Variante gefällt mir besser, die Laufzeit ist in diesem Fall zu verkraften. Vielen Dank!!!!
Gruß A.
...