' Binary search in an array of any type' Returns the index of the matching item, or -1 if the search fails'' The arrays *must* be sorted, in ascending or descending' order (the routines finds out the sort direction).' LASTEL is the index of the last item to be searched, and is' useful if the array is only partially filled.'' Works with any kind of array, including objects if your are searching ' for their default property, and excluding UDTs and fixed-length strings.' String are compared in case-sensitive mode.'' You can write faster procedures if you modify the first line' to account for a specific data type, eg.' Function BinarySearchL (arr() As Long, search As Long,' Optional lastEl As Variant) As LongFunction BinarySearch(arr As Variant, search As Variant, _ Optional lastEl As Variant) As Long Dim index As Long Dim first As Long Dim last As Long Dim middle As Long Dim inverseOrder As Boolean ' account for optional arguments If IsMissing(lastEl) Then lastEl = UBound(arr) first = LBound(arr) last = lastEl ' deduct direction of sorting inverseOrder = (arr(first) > arr(last)) ' assume searches failed BinarySearch = first - 1 Do middle = (first + last) 2 If arr(middle) = search Then BinarySearch = middle Exit Do ElseIf ((arr(middle) < search) Xor inverseOrder) Then first = middle + 1 Else last = middle - 1 End If Loop Until first > lastEnd Function