hex309’s diary

備忘録としてぼちぼちやります。VBAネタが多くなりそうです

二分探索(VBA)

今回は、二分探索です。

配列の要素を検索して、指定した値が配列の何番目にあるか調べます。
相変わらずコメント無くてすみません。

Private Sub BinarySearchTest()
    Dim vList(1 To 5) As Long
    
    vList(1) = 1
    vList(2) = 5
    vList(3) = 10
    vList(4) = 14
    vList(5) = 20
    
    Debug.Print BinarySearch(vList, 10)
End Sub

Private Function BinarySearch(ByRef vList() As Long, ByVal vTarget As Long) As Long
    Dim vHigh As Long
    Dim vRow As Long
    Dim vMid As Long
    
    vHigh = UBound(vList)
    vRow = LBound(vList)
    
    Do Until vRow > vHigh
        vMid = (vHigh + vRow) / 2
        If vList(vMid) = vTarget Then
            BinarySearch = vMid
            Exit Do
        ElseIf vList(vMid) < vTarget Then
            vRow = vRow + 1
        Else
            vHigh = vMid - 1
        End If
    Loop
End Function