VBA - Get index des N.-größten Wert in einem array
Möchte ich finden den index des N.-größten Wert in einem array. Ich kann die folgenden, aber es läuft in Probleme, wenn 2 Werte gleich sind.
fltArr(0)=31
fltArr(1)=15
fltArr(2)=31
fltArr(3)=52
For i = 0 To UBound(fltArr)
If fltArr(i) = Application.WorksheetFunction.Large(fltArr, n) Then
result = i
End If
Next
n=1 ---> 3
n=2 ---> 2 (aber ich will, dass das 0 sein)
n=3 ---> 2
n=4 ---> 1
Eine Möglichkeit wäre, zu schreiben, das array in ein Arbeitsblatt mit der index-Wert in der Zelle daneben, dann verwenden Sie die Tabellenfunktion, um die Sortierung der Palette. Sie können dann wählen, bis der index für die sortierte Liste.
Danke für den Vorschlag, aber ich versuche das zu vermeiden wenn ich kann. Es muss einen Weg, es zu tun programmgesteuert irgendwie!
oh Mist tospig Sie Wette mir lol Abgesehen davon, vielleicht schauen Sie in das hinzufügen und entfernen aus einer Sammlung?
Hallo doovers, ich aktualisierte den code. Es mag sein, dass alles, was Sie brauchen, ist hinzufügen ein "Exit for" die Schleife. Bitte im code sehen.
Hallo, ich reedited meine Antwort. Sehen, ob es hilft. Ich habe eine neue variable namens "count" zu helfen, das Problem zu lösen.
Danke für den Vorschlag, aber ich versuche das zu vermeiden wenn ich kann. Es muss einen Weg, es zu tun programmgesteuert irgendwie!
oh Mist tospig Sie Wette mir lol Abgesehen davon, vielleicht schauen Sie in das hinzufügen und entfernen aus einer Sammlung?
Hallo doovers, ich aktualisierte den code. Es mag sein, dass alles, was Sie brauchen, ist hinzufügen ein "Exit for" die Schleife. Bitte im code sehen.
Hallo, ich reedited meine Antwort. Sehen, ob es hilft. Ich habe eine neue variable namens "count" zu helfen, das Problem zu lösen.
InformationsquelleAutor doovers | 2015-02-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendet einen zweiten array zu schnell das bekommen, was Sie wollen, ohne die Schleife durch jedes element für jeden Wert von
n
X(lngPos) = Application.Max(X)
?Wie es funktioniert: X ist ein Hilfs-array, wobei das größte element gefunden, spätestens dort wird anschließend überschrieben werden, indem der maximale Wert von 52. Also in jeder Schleife, es sind weniger Elemente zu prüfen, über
Match
für ein nth-Large
Wert.InformationsquelleAutor brettdj
Edit:
Ergebnis:
Entschuldige bitte, ich schrieb den post zu schnell und ich machte einen Fehler gibt. Die Ergebnisse, die Sie bekam waren die gleichen wie meine! Ich werde die Frage Bearbeiten Sie jetzt!
Deine Bearbeitung gibt 3,0,0,1, die ist immer noch falsch
Nice one mate, ich denke, du hast es geknackt! Werde auch mal einige tests und ich werde zurück sein, um Sie zu markieren, wie die Antwort!
Obwohl deine Antwort perfekt funktionieren, ich kenn brettdj post als Antwort, da in meinem Fall, wo das array ist sehr groß, seine Lösung führt viel besser, da gibt es nur eine Schleife. Danke für die Hilfe aber!
InformationsquelleAutor El Scripto
Es ist ein bisschen "dirty" aber da bist du in Excel...
Dann könnte man auch erweitern Sie die Sortierung auf "Sortieren nach Wert dann durch den index", wenn Sie kontrollieren wollten", welche von zwei gleich 2nds soll ich wählen" - Sache...
InformationsquelleAutor Simon
Vielleicht dies:
Wie findet man die erste Instanz von der großen Zahl ersetzt es mit -9999 so auf der nächsten kehren Sie Holen die nächste Instanz.
Ich Liebe die Idee, aber ich denke, es könnte ein problem: beim Start von n = 2 (oder X = 2 in diesem Fall), dann die größte Zahl 52, nicht 31.
Wenn das dataset geändert werden kann, könnte man immer kopieren Sie es in ein zweites array und arbeiten auf, dass die änderungen keinen Unterschied machen, wie Ihre ursprüngliche array wäre immer noch intakt. El Scipto. Guter Punkt 🙂
InformationsquelleAutor Dan Donoghue
Hier der code für das finden der N-te größte Element in der Sammlung. Alles, was Sie tun müssen, ist, um eine Funktion schreiben, die zurückkehren würde, es ist index.
und die Funktion selbst, die einfachste, die ich gefunden habe.
InformationsquelleAutor Ans