Preencher automaticamente uma tabela de outra tabela se um critério for atendido

0

Eu tenho duas tabelas: Informações e Lista.

A tabela de informações tem duas colunas: nome e sexo.

A tabela Lista também tem duas colunas: Masculino e Feminino.

Estou tentando preencher automaticamente a tabela List com os nomes das pessoas que são homens ou mulheres, usando fórmulas.

Eu tentei usar INDEX() e MATCH()

=INDEX(A:A, MATCH(D1, B:B, 0),1)

mas só retorna o primeiro nome com o sexo correspondente.

Alguma ideia?

    
por Astrid 22 15.07.2018 / 15:21

1 resposta

1

Como os dados correspondentes ignoram linhas, não é possível usar uma fórmula simples de índice / correspondência para extrair os nomes (sem usar colunas auxiliares, isto é).

A solução mais simples requer o uso de uma fórmula de matriz:

Matrizentra(Ctrl+Desloca+Introduz)aseguintefórmulaemD2ecopia-cola/fill-down/fill-direitaparaorestantedascolunasdatabelaDeE(nãoseesqueçaderemover{e}):

{=IFERROR(INDEX($A:$A,SMALL(IF($B$2:$B$7=D$1,ROW($B$2:$B$7),FALSE),ROW()-1)),"")}

A fórmula funciona construindo inicialmente uma matriz que contém o índice da linha se o gênero corresponder ou FALSE caso contrário: IF($B$2:$B$7=D$1,ROW($B$2:$B$7),FALSE) .

Em seguida, a função SMALL() é usada para extrair o próximo índice menor correspondente à linha de dados da tabela List: SMALL({…},ROW()-1) . A razão pela qual isso funciona é que a função SMALL() ignora valores booleanos.

Observe que, se você inserir a fórmula em qualquer linha diferente da linha 2 , ou se após inserir as linhas da fórmula forem inseridas / excluídas acima da primeira linha de dados da tabela List, a parte ROW()-1 precisará ser ajustada o resultado é 1 para a primeira linha de dados.

Finalmente, esse índice é usado para extrair o nome apropriado: INDEX($A:$A,<next smallest index>) .

O IFERROR() está lá apenas para ocultar os erros #NUM! que ocorrem quando a função SMALL() fica sem índices válidos para retornar.

Uma versão mais robusta, mas mais complicada, da fórmula que se ajusta automaticamente ao número de linhas de dados na tabela Informações e não será interrompida se as linhas forem inseridas / excluídas acima da primeira linha de dados da tabela List. segue:

{=IFERROR(INDEX($A:$A,SMALL(IF($B$1:INDEX($B:$B,COUNTA($B:$B))=D$1,ROW($B$1:INDEX($B:$B,COUNTA($B:$B))),FALSE),ROW()-ROW($B$2)+1)),"")}
    
por 15.07.2018 / 15:49