Contagem sequencial das últimas 10 ocorrências válidas

Olá, amigos

Eu gostaria de solicitar a ajuda de vocês.

A questão é um pouco complexa e é provável que não haja o entendimento de minha necessidade somente através da descrição abaixo. Por isso, eu elaborei uma planilha simples, mas com clareza de detalhes quanto ao problema (a descrição do link está no final desta mensagem).

Preciso de uma fórmula que contabilize os 10 últimos resultados válidos de uma sequencia de dados, porém quando for detectado um dado considerado inválido (nulo), a fórmula deve buscar o dado válido mais antigo para compor o conjunto de 10 resultados válidos

Enfim, o link da planilha está logo abaixo e ficarei muito agradecido se poder contar com vocês.

https://drive.google.com/file/d/18zqbn2JjSbqREa51gqFX_U5_jnK7_GAq/view?usp=sharing

Atenciosamente,
Albert Sampaio

Bom dia.
Estava olhando a sua planilha e surgiu uma duvida. Caso exista o “-” nas colunas B a J o que vc faz ? Não contabiliza pois não há 10 para contabilizar ?

Aguardo sua resposta

Isso mesmo. “-” não contabiliza.

Olá Sampaio, me desculpe a demora em te responder… estava corrido aqui.
Bom acho que é isto que vc precisa:

Você terá que criar um módulo e jogar as rotinas abaixo dentro deste módulo, assim funcionará para qualquer plan que tiver na sua planilha, mas salve o arquivo como xslm, que é para gravar as funções criadas, caso contrario não vai funcionar depois.

e estas são as rotinas, mas para usá-las será assim:
=lapx()
=lapv()

Pode trocar o nome de acordo com a sua necessidade, mas troque dentro da rotina tambem, por exemplo, lapx por contagemx e lapv por contagemv

abs

Public Function lapx() As String
    Dim coluna, varX, inicio, contei As Integer

        coluna = ActiveCell.Column
        If Cells(2, coluna) = "" Then Exit Function
        lapx = ""
        contei = 0
        varX = 0
        If Cells(2, coluna) = "-" Then                              ' se inicio = "-".. 9 esquerda 1 direita
           For i = coluna - 1 To coluna - 50 Step -1
                If i < 2 Then Exit Function
                If Cells(2, i) <> "-" Then
                    If UCase(Cells(2, i)) = "X" Then varX = varX + 1
                    contei = contei + 1
                    If contei = 9 Then Exit For
                End If
           Next
           For i = coluna + 1 To coluna + 50
                If Cells(2, i) = "" Then Exit Function
                If Cells(2, i) <> "-" Then
                    If UCase(Cells(2, i)) = "X" Then varX = varX + 1
                    Exit For
                End If
           Next
           lapx = Str(varX): Exit Function
        Else
           For i = coluna To coluna - 50 Step -1
                If i < 2 Then Exit Function
                If Cells(2, i) <> "-" Then
                    contei = contei + 1
                    If UCase(Cells(2, i)) = "X" Then varX = varX + 1
                    If contei = 10 Then lapx = Str(varX): Exit Function
                End If
            Next
        End If
End Function

Public Function lapV() As String
    Dim coluna, varV, inicio, contei As Integer

        coluna = ActiveCell.Column
        If Cells(2, coluna) = "" Then Exit Function
        lapV = ""
        contei = 0
        varV = 0
        If Cells(2, coluna) = "-" Then                              ' se inicio = "-".. 9 esquerda 1 direita
           For i = coluna - 1 To coluna - 50 Step -1
                If i < 2 Then MsgBox ("SEM ELEMENTOS PARA CONTAGEM   "): Exit Function
                If Cells(2, i) <> "-" Then
                    If UCase(Cells(2, i)) = "V" Then varV = varV + 1
                    contei = contei + 1
                    If contei = 9 Then Exit For
                End If
           Next
           For i = coluna + 1 To coluna + 50
                If Cells(2, i) = "" Then Exit Function
                If Cells(2, i) <> "-" Then
                    If UCase(Cells(2, i)) = "V" Then varV = varV + 1
                    Exit For
                End If
           Next
           lapV = Str(varV): Exit Function
        Else
           For i = coluna To coluna - 50 Step -1
                If i < 2 Then Exit Function
                If Cells(2, i) <> "-" Then
                    contei = contei + 1
                    If UCase(Cells(2, i)) = "V" Then varV = varV + 1
                    If contei = 10 Then lapV = Str(varV): Exit Function
                End If
            Next
        End If
End Function

oi, lporto

Peço desculpas pela minha demora em prover um feedback para você.
Desde já, eu agradeço pela sua resposta. Mas não consegui botar para funcionar.
É a primeira vez que uso o VBA do excel. Acho que consegui plugar a rotina que você me enviou, pois as funções lapx() e lapv() apareciam. Mas não deu certo.
Eu agradeço se você puderes me dar uma direção.

Atenciosamente,
Albert

Olá Sampaio bom dia, imagine, todos nós temos deveres e nem sempre dá para entrar aqui no forum, mas o que não deu certo ?
Aqui está rodando conforme a tela. Pode me indicar o que está acontecendo ?
se preferir, meu email é luiz@cet.com.br
No aguardo

Oi, Luiz

Mais uma vez obrigado pela resposta. Estarei te encaminhando um email.

Atc,
Albert