Somebody posted a comment on my Excel UDF Tutorial, and on reflection it appears he’d like to navigate a range in VBA. While I don’t see a purpose in that because it duplicates either the VLOOKUP
or HLOOKUP
function (depending on whether you’re navigating a column or row).
Anyway, here’s how you’d do it in VBA:
Function Finding(lookupWord As String, lookupRange As Range, lookupColumn As Integer) As Integer
' Define variables.
Dim lookupIndex As Integer
Dim lookupMax As Integer
Dim returnValue As Integer
' Assign values to variables.
lookupIndex = 1
lookupMax = lookupRange.Rows.Count
returnValue = 1
' Print starting and ending index values.
MsgBox ("[" + CStr(lookupIndex) + "][" + CStr(lookupMax) + "]")
' Loop until found, but exit when not found.
Do Until lookupRange.Cells(lookupIndex, 1).Value = lookupWord
' Print diagnostic value to determine what's evaluated.
MsgBox ("[" + CStr(lookupIndex) + "] [" + CStr(lookupRange.Cells(lookupIndex, 1).Value) + "]")
' Fail safe exit when no matching value is found.
If lookupIndex = (lookupMax + 1) Then
' Assign a 0 (zero) as a false return flag value.
returnValue = 0
Exit Do
End If
' Increment counting index value.
lookupIndex = lookupIndex + 1
Loop
'Return a 1 when the value is found and zero when it isn't.
Finding = returnValue
End Function
I only chose a DO UNTIL
loop because that was in the comment. It would be more appropriate to, from my perspective, use a FOR
range loop, like this:
For lookupIndex = 1 To lookupMax
' Loop contents.
Next lookupIndex
Hope this helps.