[Eine Seite zurück] [Übersicht] [Eine Seite vor]

Benutzung auf eigene Gefahr !
Keine Garantie für garnichts !

Suche in sortierten Excel-Spalten (Bisektion)

Sprache / Programm: Excel ab Version 97
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

Bereich

Spalte in Excel, in der nach einem Wert gesucht werden soll

Wert

Wert der in dieser Spalte aufgefunden werden soll

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.