Excel: Como retornar o último número de linha que contém uma string específica?

2

No excel, existe uma fórmula excel que eu possa usar para preencher a coluna B (no meu exemplo abaixo) que retornará o último número da linha que contém uma string específica, antes da linha atual?

Os dados não são contíguos.
Por exemplo, os dados podem ser:

   |  A (value)    B (prev recent instance)
----------------------------------------------
 1 |  Mike
 2 |  John
 3 |  Mike         1
 4 |  Tony         
 5 |  Mike         3
 6 |  John         2

Então, quero expandi-lo para que a coluna C mostre a instância mais antiga.

Parece muito semelhante a esta pergunta: O que é uma fórmula do excel que me retornará o número da última linha de uma célula dentro de um intervalo que contém dados específicos? , entretanto essa pergunta e resposta exigem que os dados sejam contíguos.

Editar: Eu gostaria que a resposta fosse uma Fórmula de Planilha, no entanto, se você acha que é mais apropriado implementar via VBA, inclua isso também em sua resposta com os prós e contras de cada abordagem.

    
por Turgs 30.01.2012 / 13:39

2 respostas

1

Para encontrar o exemplo mais antigo, mencionado abaixo, é a fórmula: -

=LOOKUP(2,1/(A:A=A2),ROW(A:A))

Para sua melhor compreensão, abaixo está a captura de tela

    
por 30.01.2012 / 17:05
3

Supondo que seus dados iniciem em A1, experimente esta "fórmula de matriz" em B2

=IF(COUNTIF(A$1:A1,A2),MATCH(2,1/(A$1:A1=A2)),"")

confirmado com CTRL + SHIFT + ENTER e copiado para baixo

ou você pode usar esta versão não matricial

=IF(COUNTIF(A$1:A1,A2),MATCH(2,INDEX(1/(A$1:A1=A2),0)),"")

No Excel 2007 ou posterior, você pode simplificar com o IFERROR, ou seja, a versão do array se torna

=IFERROR(MATCH(2,1/(A$1:A1=A2)),"")

Para a linha "1ª instância" na coluna C, experimente esta fórmula em C1 copiada para baixo

=MATCH(A1,A$1:A1,0)

Observação: as fórmulas não retornam estritamente "números de linhas", mas os números de linhas relativas dos seus dados, ou seja, a linha 1 de seus dados retorna 1, etc.

    
por 30.01.2012 / 14:56