A necessidade de um procv com retorno de todas as referências, a função do Benzadeus e uma função de Adilson Soledade, trabalhando em conjunto atendem isso.
Tenho tentado turbinar uma função Procv que me retorne todas as ocorrências (separadas por vígula em uma mesma célula) de modo que haja um condicional para retornar somente de uma dado intervalo de tempo. Tenho as colunas: Cliente, Pedido, Data.
Ou seja, a fórmula que imagino deveria me fornecer todos os pedidos de um Cliente (escrito em uma célula de referência) em um intervalo de datas em uma coluna (não necessariamente ordenada sendo: datamin em uma célula e datamax em outra uma célula). Informo a data min, a data máxima, e o sistema busca todos os pedidos de um determinado cliente neste periodo e concatena separando por virgula.
No topico antigo:
viewtopic.php?f=10&t=5300
O Andre informou o seguinte:
"Já corrigi onde havia o erro:
If varTemp(l, 1) = sProcura And varTemp(l, lngColunaData) <= dtMin And varTemp(l, lngColunaData) >= dtMax Then
neste And o certo seria um Then If e após o primeiro End If emendar mais um End If.
A resolução foi dada pelo próprio Benzadeus a quem agradeço!
Vlw."
Fiz o ajuste conforme descrito, porém a função apresenta erro. Segue a função já ajustada
Function PROCVCONDATA(sProcura As String, vBD As Variant, lngOffset As Long, lngColunaData As Long, dtMin As Date, dtMax As Date)
'Altere essa constante se quiser utilizar outro caractere como dígito separador.
Const strSeparador As String = "; "
Dim l As Long
Dim lngTotal As Long
Dim strTemp() As String
Dim varTemp As Variant
'Transformo o parâmetro de entrada (que pode ser uma matriz ou uma Range) para trabalhar
'apenas com uma Variant:
varTemp = CVar(vBD)
For l = LBound(varTemp, 1) To UBound(varTemp, 1)
' o problema esta nesta linha
If varTemp(l, 1) = sProcura Then If varTemp(l, lngColunaData) <= dtMin And varTemp(l, lngColunaData) >= dtMax Then
'Foi encontrada uma correspondência na primeira coluna do vetor de varTemp.
lngTotal = lngTotal + 1
ReDim Preserve strTemp(1 To lngTotal)
strTemp(lngTotal) = varTemp(l, lngOffset)
End If
End If
Next l
If IsArrayEmpty(strTemp) Then
'Caso não seja encontrada nenhuma correspondência, a função retornará uma mensagem.
PROCVCONDATA = "não encontrado"
Exit Function
Else
'Join concatena todas as correspondências encontradas do vetor strTemp:
PROCVCONDATA = Join(strTemp, strSeparador)
End If
End Function
End Function
Alguma luz de onde esta o erro ???
Postado : 20/04/2015 2:49 pm