RANG-Funktion in VBA auf ARRAY anwenden
Schritt-für-Schritt-Anleitung
- Erstelle ein neues Modul in deinem Excel-VBA-Editor (Alt + F11).
- Definiere dein Array mit den Werten, die du bewerten möchtest. Beispiel:
Dim ar() As Variant
ar = Array(30, 8, 4, 90, 5, 60, 2, 1, 7)
- Nutze die UDF (User Defined Function), um das Ranking zu ermitteln. Hier ist ein Beispiel für eine einfache UDF:
Function udfRank(Wert As Double, Wertereihe As Variant, Optional aufsteigend As Boolean = False) As Long
Dim lngZ As Long, lngE As Long
For lngZ = LBound(Wertereihe) To UBound(Wertereihe)
If (aufsteigend And Wert > Wertereihe(lngZ)) Or (Not aufsteigend And Wert < Wertereihe(lngZ)) Then
lngE = lngE + 1
End If
Next lngZ
udfRank = lngE + 1
End Function
- Rufe die Funktion auf, um das Ranking eines Wertes zu erhalten:
MsgBox udfRank(ar(0), ar) ' Gibt das Ranking für den ersten Wert (30) zurück
Häufige Fehler und Lösungen
-
Fehler: "Typ nicht korrekt" beim Aufruf von Rank
Lösung: Stelle sicher, dass du das Array korrekt übergibst. Application.WorksheetFunction.Rank erwartet ein Range-Objekt, daher musst du die Werte in eine Tabelle kopieren, wenn du diese Funktion verwenden möchtest.
-
Fehler bei der Verwendung von nicht-numerischen Werten
Lösung: Achte darauf, dass dein Array nur numerische Werte enthält. Nicht-numerische Werte werden ignoriert und können zu unerwarteten Ergebnissen führen.
Alternative Methoden
Wenn du keine eigene UDF nutzen möchtest, kannst du auch die Excel-Funktion RANK in Kombination mit einem temporären Range verwenden. Das geht so:
- Kopiere dein Array in eine temporäre Tabelle.
- Verwende die
RANK-Funktion direkt auf diesem Range. Beispiel:
Range("A1:A9").Value = Application.Transpose(ar) ' Transponiere das Array für die Tabelle
RankValue = Application.WorksheetFunction.Rank(Range("A1").Value, Range("A1:A9"))
MsgBox RankValue
Praktische Beispiele
Hier ist ein einfaches Beispiel, das die UDF in Aktion zeigt:
Sub TestRanking()
Dim ar() As Variant
ar = Array(30, 8, 4, 90, 5, 60, 2, 1, 7)
Dim rankValue As Long
rankValue = udfRank(ar(0), ar)
MsgBox "Das Ranking von " & ar(0) & " ist: " & rankValue
End Sub
Dieses Skript gibt aus, dass der Wert 30 das 7. größte Element im Array ist.
Tipps für Profis
- Überlege, deine UDF so zu gestalten, dass sie auch mit größeren Arrays gut funktioniert, indem du die Effizienz der Schleifen und Berechnungen optimierst.
- Nutze
Option Explicit und deklariere alle Variablen, um Fehler zu vermeiden.
- Teste deine Funktionen gründlich, insbesondere bei der Übergabe von Arrays und Range-Objekten.
FAQ: Häufige Fragen
1. Kann ich die RANG-Funktion auch auf mehrdimensionale Arrays anwenden?
Ja, du kannst eine UDF anpassen, um mehrdimensionale Arrays zu verarbeiten. Beachte jedoch, dass dies die Komplexität der Funktion erhöht.
2. Gibt es eine Möglichkeit, die RANG-Funktion ohne temporäre Tabellen zu nutzen?
Aktuell ist es am einfachsten, die eigene UDF zu verwenden, da die Excel-Funktion RANK ein Range-Objekt erfordert. Temporäre Tabellen sind oft die praktikabelste Lösung.
3. Funktioniert das auch in Excel 365?
Ja, die oben genannten Methoden funktionieren auch in Excel 365 sowie in älteren Versionen. Achte darauf, dass die VBA-Umgebung aktiviert ist.