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.