Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Dúvidas sobre cálculos, funções simples e aninhadas, fórmulas matriciais, etc.
  • Avatar do usuário
#5221
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.
#5229
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? :?
Você não está autorizado a ver ou baixar esse anexo.
#5236
"" 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
#5240
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
Você não está autorizado a ver ou baixar esse anexo.
#5246
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 !!!!!!!!!!!!!!!!!!!!!!!
#5247
:|

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
#5251
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 !
#5252
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?
#5253
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.
#5255
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 :)
#5258
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
Você não está autorizado a ver ou baixar esse anexo.
#5263
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
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord