As seguintes fórmulas de array funcionarão mesmo se qualquer um dos nomes for idêntico. Digite-os em B2
com Ctrl + Deslocamento + Enter , depois preencha.
Este usa um intervalo fixo com base nos seus dados de amostra:
{=IFERROR(INDEX(A:A,SMALL(IF(A$1:A$10<>"",ROW(A$1:A$10),""),ROW()-ROW(A$1)+1)),"")}
Este usa um intervalo dinâmico, ajustando-se automaticamente à medida que você adiciona mais nomes à coluna A:A
:
=IFERROR(INDEX(A:A,SMALL(IF(A$1:INDEX(A:A,MATCH("*",A:A,-1))<>"",ROW(A$1:INDEX(A:A,MATCH("*",A:A,-1))),""),ROW()-ROW(A$1)+1)),"")
A mesma fórmula dinâmica acima, em um formato expandido:
=
IFERROR(
INDEX(
A:A
, SMALL(
IF(
A$1:INDEX(A:A,MATCH("*",A:A,-1))<>""
, ROW(A$1:INDEX(A:A,MATCH("*",A:A,-1)))
, ""
)
, ROW()-ROW(A$1)+1
)
)
, ""
)
Como você pode ver, esta segunda fórmula é simplesmente a primeira com todos os A$10
substituídos por INDEX(A:A,MATCH("*",A:A,-1))
.
Explicação:
A função IF()
é equivalente a:
IF(
{"";"Camilo Georgi";"";"Carla Suarez Navarro";"";"Belinda Bencic";"";"Grace Min";"";"Johanna Larsson"}<>""
, {1;2;3;4;5;6;7;8;9;10}
, ""
)
que, como o Excel expande automaticamente as constantes em matrizes constantes de comprimento correspondentes, torna-se:
IF(
{FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE;FALSE;TRUE}
, {1;2;3;4;5;6;7;8;9;10}
, {"";"";"";"";"";"";"";"";"";""}
)
que é avaliado como:
{"";2;"";4;"";6;"";8;"";10}
A função SMALL()
torna-se então:
SMALL({"";2;"";4;"";6;"";8;"";10},ROW()-1+1)
e como SMALL()
ignora strings, isso é equivalente a:
SMALL({2;4;6;8;10},ROW())
Observe que os números são os índices dos nomes não em branco. Para a célula B1
SMALL()
retorna 2
, para B2
retorna 4, etc. Para B6
e menor, retorna o erro #NUM!
. (É por isso que existe uma função IFERROR()
. Ela converte esses erros em espaços em branco.)
Finalmente, a função INDEX()
puxa os nomes usando os índices.