RANG-Funktion in VBA auf ARRAY anwenden
NoNet
ich suche ein Synonym für die RANG()-Funktion in VBA, die man auf ARRAYS anwenden kann.
Die RANG()-Funktion selbst erhält man in VBA bekanntlich mit Application.WorksheetFunction.Rank()
Diese funktioniert auch, wenn man als Argumente der Funktion Tabellenbereiche angibt !
Ich möchte jedoch keine Tabellenbereiche angeben (auch nicht das ARRAY temp. in eine Tabelle kopieren !), sondern direkt die Werte des ARRAYs auswerten.
Beispiel : Das ARRAY enthält die Werte {30,8,4,90,5,60,2,1,7}
Ich möchte nun das Ranking des ersten Wertes (30) ermitteln (das Ergebnis müsste 7 lauten, da 30 der 7.grösste Wert im Array ist !).
Mit einer UDF (udfRank - siehe unten) kann ich das ermitteln, ich würde jedoch gerne auf die Excel-eigene Funktion RANK() zurückgreifen. Hat jemand eine tolle Idee dazu ?
Hier ein kleines Beispiel zum Testen mit 10 Zufallswerten im ARRAY :
Sub ArrayTest()
Dim ar(10), intZ As Integer
'Zufallswerte in ARRAY schreiben :
For intZ = 0 To 9
ar(intZ) = Rnd()
Next
'funktioniert nicht :
'MsgBox Application.WorksheetFunction.Rank(ar(0), ar)
[A1:J1] = ar 'Werte in Zeile 1 zur Kontrolle ausgeben
MsgBox udfRank(ar(0), ar)
End Sub
Function udfRank(Wert, Wertereihe, Optional aufsteigend = True)
Dim dblW As Double, lngZ As Long, lngE As Long
For lngZ = LBound(Wertereihe) To UBound(Wertereihe)
If aufsteigend Then
If Wert > Wertereihe(lngZ) Then lngE = lngE + 1
Else
If Wert
Vielen Dank für's Mitdenken, Gruß NoNet