Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Feldindizes bestimmen, welche die nächste kleinere bzw. größere Zahl beinhalten
#11
… und um Bildschirmtinte zu sparen:

Sub wenigCode()
Dim low As Byte, high As Byte
low = Application.Match(37, Array(10, 19, 26, 35, 44, 51), 1)
high = low + 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)
Antworten Top
#12
Und noch ein Hinweis:
Da .Match mit dem dritten Parameter 1 erheblich schneller ist als mit 0 (der für unsortierte Felder gilt und nur bei Übereinstimmung ein Ergebnis liefert), bin ich mir sicher (auch wenn ich Excel nicht programmiert habe  :21: ), dass bei 1 binär gesucht wird.

My two cents,
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)
Antworten Top
#13
Hallo und zunächst einmal allen ein herzliches Danke, die mir zu diesem Thema geantwortet haben.
Den Code von Andre werde ich mir am Wochenende genauer anschauen. Ralf, du hast mir genau die
Antwort geliefert, nach der ich gesucht habe. Hätte nicht gedacht, dass so etwas geht.

Für das Forum hier  möchte ich noch eine minimalinvasive Verbesserung posten:

Code:
Sub RPP()
Dim f(1 To 6) As Long
Dim x As Long
Dim low As Byte, high As Byte
x = 19
f(1) = 10
f(2) = 19
f(3) = 26
f(4) = 35
f(5) = 44
f(6) = 51
low = Application.Match(x, f, 1)
high = IIf(f(low) = f(Application.Match(x, f, 1)), low, low + 1)
End Sub
Bei low liefert der Code von Ralf auch genau den Index, wenn der Wert von x genau gleich einem der Feldwerte ist.
Da high von low "abhängig" ist, habe ich für diesen Fall eine Kleinst-Änderung des Codes vorgenommen, um auch solche Fälle abzudecken.

Nochmals vielen Dank Ralf.
Antworten Top


Gehe zu:


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