Você está basicamente perguntando como obter o <-em> valor filtrado > de alguma coluna na n-ésima linha de outra coluna.
A Microsoft explica como obter o valor filtrado de n-ésimo valor em Excel: Encontrando o enésimo valor que atende a uma condição . Isso usa "fórmulas de matriz" para executar cálculos em itens em uma matriz (uma lista). O exemplo da Microsoft pode ser estendido para obter o valor correspondente a um número de linha. Se sua matriz estiver em A2:A8
e você quiser mostrar apenas os valores >= 0
, o seguinte poderá ser usado em B2:B8
(não testado):
=iferror(index(A2:A8, small( if(A2:A8 >= 0, row()-1, ""), row()-1) ), "")
Tenha o cuidado de inserir isso como uma fórmula de matriz: primeiro selecione as células B2
thru B8
, cole o acima na barra de fórmulas e salve-o pressionando Ctrl + Shift + Enter (ou Command + Return in Office em um Mac, ou Command + Shift + Return no OpenOffice em um Mac).
Para C2:C8
, repita com a condição >= 0
substituída por < 0
.
Para decifrar este passo-a-passo, adicionei as seguintes fórmulas a uma planilha do OpenOffice Calc, com seus resultados abaixo. Note que no OpenOffice um precisa de um ponto-e-vírgula para separar parâmetros de função , enquanto no Excel pode ser necessário um vírgula, daí os pontos e vírgulas nas próximas fórmulas.
EmD2:D8
:
=if(A2:A8>=0;row()-1;"")
Isto mostra o número da linha menos 1 se o valor na mesma linha em A2:A8
for positivo, ou uma célula vazia caso contrário. A subtração 1 converte as linhas de 2 a 8 em uma posição de 1 a 7, para ignorar a primeira linha de cabeçalho.
Agora, sabemos que os valores 1, 4, 5 e 7 de A2:A8
são positivos.
Em seguida, em E2:E8
:
=small( if(A2:A8 >= 0; row()-1; ""); row()-1 )
Isso leva os resultados anteriores como a entrada para small(..., k)
que leva o k-ésimo menor número mostrado anteriormente em D2:D8
. (Essa lista é classificada de 1 a 7, mas isso nem é necessário para a função small
.) Aqui, definimos k
para o número da linha atual menos 1 para ignorar a linha de cabeçalho novamente. Então, para a terceira linha, obtemos a posição do segundo valor positivo em A2:A8
. Mas para E6
e para baixo nenhum valor é encontrado, mostrando um erro.
Em F2:F8
:
=index(A2:A8; small( if(A2:A8 >= 0; row()-1; ""); row()-1 ))
Isso leva as posições 1, 4, 5 e 7 (e os erros) da etapa anterior como entrada para index(..., k)
, que encontra o valor k-th de A2:A8
, ou um erro se k
é inválido.
Agora, F2:F8
ainda mostra um erro nas últimas linhas. No Excel 2007 e posterior, pode-se usar iferror
para não mostrar nada em caso de erro, como usado na primeira fórmula acima. O OpenOffice não suporta esse , mas precisa de if(iserror(...); ""; ...)
, substituindo ambos ...
pela fórmula de F2:F8
. Não é legal.
Como alternativa, use index(A2:A9; ...)
para incluir a célula A9
ao obter o valor real da primeira coluna e, em seguida, faça o OpenOffice usar small(...; 8)
se nenhum valor mais for encontrado. Como em G2:G8
:
=if(A2:A8 >= 0; row()-1; 8)
Isso ainda pesquisa números positivos nos 7 valores de A2:A8
, mas agora retorna 8
, se não positivo.
Em H2:H8
:
=small( if(A2:A8 >= 0; row()-1; 8); row()-1 )
E finalmente em I2:I8
:
=index(A2:A9; small( if(A2:A8 >= 0; row()-1; 8); row()-1 ))
Aqui, o valor 8
é mapeado para o valor em A9
. Na captura de tela do exemplo, A9
contém alguns pontos, que são mostrados em H6:H8
, pois nenhum número positivo é encontrado.
Assim como a Microsoft escreve : se você realmente quer dominar fórmulas no Excel, você precisa saber como usar fórmulas de matriz . Aproveite.