Página 1 de 1

Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 21 Nov 2015 às 12:53
por Mucango
Primeiro, quero me desculpar por não agradecer publicamente ao colaborador Parkeles. Isso se deu pelo motivo de eu ter fechado o tópico imaturamente : coisas de principiante. Parkeless, MUITO OBRIGADO.

Você resolveu 99,9% (de forma magnífica), então, peço uma pequena variação na fórmula, ( =SE(SOMA(1*($A$1:A1=A2))>0;LIN(A2)-1-MÁXIMO(SE($A$1:A1=A2;LIN($A$1:A1);0));"") ) para que ela pesquise a partir de ponto (célula) fixo(a), citando ainda o exemplo anterior, como se o critério fosse apenas os números "18".



8
28
10
15
18
19
10
12
13
18
33
10
13
17
22
36
15
27
5
13
25
11
14

... neste caso, aparecendo, o resultado de : 4 (linhas de distância entre os números 18)


Valeu mesmo e dessa vez já agradeço já antecipadamente.

Re: Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 21 Nov 2015 às 21:04
por Parkeless
Mucango,

Primeiramente, muito de nada kkk

A fórmula ficou meio grandinha, e ia ser chato adaptar alguma coisa nela, então estou mandando a planilha em anexo ok? Provavelmente com VBA ficaria mais simples, mas fui tentar seguir a mesma linha da solicitação anterior, e deu no que deu ^^'

Obs.: Vi que na sua listagem tem números que se repetem 3 vezes... A fórmula considera a distância da última ocorrência, contra a penúltima. Era isso? :?

Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 11:34
por Mucango
"" Obs.: Vi que na sua listagem tem números que se repetem 3 vezes... A fórmula considera a distância da última ocorrência, contra a penúltima. Era isso? ""

Sim, preciso exatamente disso, apenas as distânicas da penúltima para a última ;) , tentando pesquisar de um valor fixo, inserido manualmente (em uma célula fora do intervalo, melhor dizendo) ... minha frustração é que uso o Excel 2003 e o pacote de compatibilidade baixado não resolveu .... :oops:

Vou conseguir o 2007 e te dou um feedback ... valeu pela ajuda mais uma vez

Re: Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 12:09
por Parkeless
Mucango,

Criei uma versão com VBA; essa deve funcionar com o office 2003... estou anexando, mas disponibilizo também o código abaixo:
Código: Selecionar todos
Function Distancia_ocorrencias(Intervalo As Range, Criterio As String)
Dim cell As Range
Dim linha_ultima As Long
Dim linha_penultima As Long
Dim Numero_ocorrencias As Long
Dim Ocorrencia As Long

Set Intervalo = Intervalo.SpecialCells(xlCellTypeConstants + xlCellTypeFormulas)


Numero_ocorrencias = Application.WorksheetFunction.CountIf(Intervalo, Criterio)

If Numero_ocorrencias < 2 Then
    Distancia_ocorrencias = ""
    Exit Function
End If

For Each cell In Intervalo
If cell = Criterio Then
    Ocorrencia = Ocorrencia + 1
        If Ocorrencia = Numero_ocorrencias Then
            linha_ultima = cell.Row
            GoTo final
        ElseIf Ocorrencia = Numero_ocorrencias - 1 Then
            linha_penultima = cell.Row
        End If
End If
Next cell
final:
Distancia_ocorrencias = linha_ultima - linha_penultima - 1

End Function
Para aplicar em outra planilha, abra o editor do VBA (alt + 11), Inserir > Módulo, e cole o código acima... depois vá na planilha e digite:
"= Distancia_ocorrencias(Intervalo de busca;Critério)"

Obs.: Dessa vez não esqueci de salvar em modo de compatibilidade; malz kk

Re: Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 13:34
por Mucango
Parkless, era exatamente isso que eu buscava (e com compatibilidade e tudo !), mas ainda quero testar (abusar) um pouco mais de sua sapiência ...

Apareceu uma outra variação nos meus cálculos, então como faço (na mesma estrutura desta função VBA) pra ele calcular a distância entre o final da planilha e a última linha contendo o valor (critério) ?

**** não é necessário calcular os dois valores ao mesmo tempo (penultimo e ultimo / ultimo e fim da matrzi), até por que entre o ultimo e o penultimo vocÊ já MATOU, apenas entre o último valor (critério) e o fima da matriz (tabela)

Valeu !!!!!!!!!!!!!!!!!!!!!!!

Re: Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 14:02
por Parkeless
:|

Via função VBA, aplicar da mesma forma do código anterior:
Código: Selecionar todos
Function Distancia_ocorrencias_v2(Intervalo As Range, Criterio As String)
Dim cell As Range
Dim linha_ultima As Long
Dim Numero_ocorrencias As Long
Dim Ocorrencia As Long

Set Intervalo = Intervalo.SpecialCells(xlCellTypeConstants + xlCellTypeFormulas)
Numero_ocorrencias = Application.WorksheetFunction.CountIf(Intervalo, Criterio)

For Each cell In Intervalo
If cell = Criterio Then
    Ocorrencia = Ocorrencia + 1
        If Ocorrencia = Numero_ocorrencias Then
            linha_ultima = cell.Row
            GoTo final
        End If
End If
Next cell
final:

Distancia_ocorrencias_v2 = Application.WorksheetFunction.CountA(Intervalo) - linha_ultima - 1

End Function

Re: Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 16:09
por Mucango
Parkeless, isso mesmo ... ACERTOU DE NOVO

Fiz outra variação para mais de uma coluna o resultado foi muito alterado, mas acho sei o motivo, o VBA calcula todas as células da matriz enquanto que eu preciso que continue calculando a menor distância, neste caso : 2


Imagem

Qual linha ainda tenho que alterar para ele buscar em todas as colunas do intervalo ?

Valeu !

Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 16:18
por Parkeless
Mucango,

O código que fiz comporta só uma coluna... para duas colunas, eu teria que bolar outra coisa.

Parece que você está tentando, etapa por etapa, chegar a um resultado final...

Acho melhor você postar uma planilha com o resultado FINAL do que você quer (informando o resultado esperado), senão vamos ficar rodando em círculos ^^' tem como?

Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 16:23
por Mucango
Parkeless, realmente achei que a resposta mais simples poderia ser adaptada para a complexa, em verdade, são 6 colunas, mas cara, sei que to sendo um pé no saco pra você ... Desculpe e quero agradecer mais uma vez pelo seu conhecimento e tempo, principalmente em um final de semana !


Valeu e muitas bençãos.

Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 16:29
por Parkeless
Fica tranquilo cara; faço porque gosto de desafios, não por obrigação rs

Mas manda seu arquivo aí, ou uma simulação, que eu bolo aqui :)

Re: Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 17:00
por Mucango
Ok, só tenho a agradecer, segue o arquivo ...

Só reforçando sem abusar de sua boa vontade : só falta ele pesquisar a menor distância entre o critério e a última linha em várias colunas

Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 22 Nov 2015 às 22:19
por Parkeless
Tenta essa função:
Código: Selecionar todos
Function Distancia_ocorrencias_v3(Intervalo As Range, Criterio As String)
Dim cell As Range
Dim Coluna_ocorrencia As Long
Dim Ocorrencia As Range
Dim ultimalinha As Long

Set Ocorrencia = Intervalo.Cells(1, 1)

'Determinar última ocorrencia
For Each cell In Intervalo
    If cell = Criterio Then
        'Verificar ocorrencia; se estiver mais abaixo, trocar
        If cell.Row > Ocorrencia.Row Then
            Set Ocorrencia = cell
            Coluna_ocorrencia = cell.Column
        End If
    End If
Next cell

'Determinar última linha do intervalo
For Each cell In Intervalo
    If cell.Row > ultimalinha Then: ultimalinha = cell.Row
Next cell


Distancia_ocorrencias_v3 = ultimalinha - Ocorrencia.Row

End Function
Essa teoricamente suporta qualquer range, independente do número de colunas... se der certo rs

Re: Distância entre linhas contendo o mesmo valor (parte 2)

Enviado: 23 Nov 2015 às 13:11
por Mucango
Excelente .... funcionou perfeitamente.

Grato pelo seu auxílio, tempo e presteza.

:) ;)

Abraço, muito sucesso e bençãos.