Registriert seit: 29.09.2015
Version(en): 2030,5
17.02.2016, 11:31
@RPP :19:
Vielleicht zum 'testen'
Code:
Sub M_snb()
Application.ScreenUpdating = False
sn = Cells(1).CurrentRegion.Columns(1)
With CreateObject("scripting.dictionary")
For j = 1 To UBound(sn)
If .exists(sn(j, 1)) Then sn(j, 1) = ""
x0 = .Item(sn(j, 1))
Next
End With
Cells(1).CurrentRegion.Columns(1) = sn
End Sub
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Oder so:
(wir befinden uns in Excel, da sollte man imo auch Excel-Funktionalitäten nutzen,
einfach, nachvollziehbar, extrem schnell)
Code:
Sub RPP()
Tabelle2.Columns(1).RemoveDuplicates 1
End Sub
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
So, mal ein Zwischenstand:
Ausgangsposition:
- 10.000 Zufallszahlen zwischen 1000 und 9999
- Variante ratrad: Zeit 18,43 sek, es verbleiben 6.051 Unikate
- Variante RPP: Zeit 0,11 sek, es verbleiben 6.051 Unikate
- Variante snb: Zeit 0,16 sek, es verbleiben 217 Unikate
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 29.09.2015
Version(en): 2030,5
Wie grosz ist Ubound(sn) ?
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Hab den Fehler gefunden.
Dein:
Cells(1).CurrentRegion.Columns(1) = sn
beim Rückschreiben des Arrays produziert Leerzeilen!
UBound ist 10.000
Leerzeilen entferne ich dann mit
Columns(1).SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Allerdings bin ich dann bei 2,1 Sekunden, 20mal so lange wie meine simple Excel-Methode.
Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag.
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Registriert seit: 14.04.2014
Version(en): 2003, 2007
Hallo zusammen,
wegen der anfänglichen Problemstellung wollte ich auch schon auf das Dictionary aufmerksam machen.
Auch wenn das Thema jetzt sich verlagert hat, finde ich es trotzdem erwähnenswert.
Der zuletzt eingestellte Code von snb könnte so erweitert bzw. angepasst funktionieren:
Code:
Sub M_snb_ati()
Application.ScreenUpdating = False
sn = Cells(1).CurrentRegion.Columns(1)
With CreateObject("scripting.dictionary")
For j = 1 To UBound(sn)
.Item(sn(j, 1)) = 0
Next
Cells(1).CurrentRegion.Columns(1).Clear
Cells(1).Resize(.Count) = Application.Transpose(.keys)
End With
End Sub
Gruß Atilla