Benutzung auf eigene Gefahr ! |
Beschreibung |
Wo steht der Wert ? Die Funktion sucht in einer einspaltigen Tabelle nach einem Wert und gibt die Zeile zurück, in der der Wert gefunden wurde. Die Suche verwendet die Methode der Intervallhalbierung (Bisektion). |
VBA-Quelltext |
' Sucht In einem [SuchBereich] nach einem [Wert] und gibt die ' Zeilennummer zurück. ' Erfordert aufsteigend oder absteigend sortierten [Suchbereich] !! Private Function BiSektion(Suchbereich As Range, Wert As Double) As Range Dim GrenzO As Long, GrenzU As Long, GrenzM As Long Dim Aufsteigend As Boolean, Abstand As Double GrenzU = 1 GrenzO = Suchbereich.Rows.Count Aufsteigend = Suchbereich(GrenzU) <= Suchbereich(GrenzO) While GrenzU + 1 < GrenzO GrenzM = (GrenzU + GrenzO) \ 2 If Wert = Suchbereich(GrenzM) Then Set BiSektion = Suchbereich(GrenzM) Exit Function ElseIf (Wert < Suchbereich(GrenzM)) Then If Aufsteigend Then GrenzO = GrenzM Else GrenzU = GrenzM Else If Aufsteigend Then GrenzU = GrenzM Else GrenzO = GrenzM End If Wend ' Wenn [Wert] nicht exakt In [SuchBereich] gefunden wird, dann ' wird die Zeile mit dem nächstliegenden Wert ermittelt Abstand = Abs(Wert - Suchbereich(GrenzU)) - Abs(Suchbereich(GrenzO) - Wert) If Abstand <> 0 Then GrenzM = IIf(Abstand < 0, GrenzU, GrenzO) Set BiSektion = Suchbereich(GrenzM) End Function |
Argumente der Funktion/Prozedur |
|
Rückgabewert |
Der Rückgabewert ist die Zeilennummer, an der der Wert gefunden wurde. Falls der Wert nicht exakt vorliegt, wird der nächstgelegene Wert gesucht und dessen Zeile zurückgegeben |
Anwendungsgebiete, Fehler und Warnungen |
Das Verfahren setzt voraus, dass in dem gesuchten Intervall die Werte entweder aufsteigend oder absteigend sortiert werden. |