Por que minha função de planilha se comporta de maneira diferente de quando chamada do código?

Quando eu chamo a função do Excel (em uma célula):

=allVlookup(O24,A:D,3,"")

vs via vba

MsgBox allVlookup(Range("O24"), Range("A:D"), 3, "")

Eu recebo resultados diferentes. Quando chamado do Excel, eu só obtenho a primeira correspondência, mas ao chamar de um sub teste VBA com parâmetros idênticos (exceto adicionarRange aos argumentos para permitir que o sub seja executado), recebo os resultados completos (que é mais de um).

A função que estou usando é:

Public Function allVlookup(lookupRange As Range, tableRange As Range, colIndex As Integer, Optional delimiter As String = "") As String

    Dim c As Range
    Dim firstAddress As String
    'MsgBox tableRange.Address  ' this is correct
    'With Sheets(4).Range("A1:C12").Columns(1)
    'With Range("A1:C12").Columns(1)

    'this doesn't allow things to work right either (???)
    'Set tableRange = Range("A:D")
    'Set lookupRange = Range("O24")

    'search only the first column for matches
    With tableRange.Columns(1)
        Set c = .Find(what:=lookupRange.Value, LookIn:=xlValues)

        If Not c Is Nothing Then

            firstAddress = c.Address

            Do
                'add the delimiter
                If (allVlookup <> "") Then
                    allVlookup = allVlookup + delimiter
                End If

                'append value to previous value
                allVlookup = allVlookup + c.Offset(0, colIndex).Value


                Set c = .FindNext(c)
                'exit conditions
                'no match found
                If (c Is Nothing) Then
                    Exit Do
                    'we're back to start
                ElseIf (c.Address = firstAddress) Then
                    Exit Do
                End If

            Loop
        End If
    End With

End Function

Não sei explicar por que isso está acontecendo.

O que posso fazer para que as saídas sejam idênticas?

questionAnswers(2)

yourAnswerToTheQuestion