Häufigkeit eines Zahlenwertes in einem Feld berechnen
#21
Smile 
@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
Top
#22
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)
Top
#23
So, mal ein Zwischenstand:
Ausgangsposition:
- 10.000 Zufallszahlen zwischen 1000 und 9999
  1.  Variante ratrad: Zeit 18,43 sek, es verbleiben 6.051 Unikate
  2.  Variante RPP: Zeit 0,11 sek, es verbleiben 6.051 Unikate
  3. Variante snb: Zeit 0,16 sek, es verbleiben 217 Unikate  Huh
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)
Top
#24
Wie grosz ist Ubound(sn) ?
Top
#25
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)
Top
#26
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
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste