Retorna a matriz com base no valor da coluna na matriz de origem

1

Eu estou tentando obter uma matriz de apenas valores que atendem a determinados critérios.

Eu tenho uma matriz na qual a reunião desses critérios é resumida em uma coluna de VERDADEIRO / FALSO para cada entrada, como tal

INDEX MEETS_CRITERIA
1     TRUE
2     TRUE
3     FALSE
4     FALSE
5     FALSE
6     TRUE
7     TRUE
8     TRUE
9     FALSE
10    FALSE

Desejo obter, em uma planilha separada, uma lista, sem lacunas, de todos os índices que são verdadeiros na coluna "MEETS_CRITERIA", conforme abaixo

INDEX
1
2
6
7
8

Estou tentando isso com a seguinte fórmula de matriz:

{=INDEX(ORIGINAL_ARRAY!$A$2:$A$10, MATCH("TRUE",ORIGINAL_ARRAY!$B$2:$B$10, 0))}

No entanto, isso retorna # N / A.

Qual é o erro na minha fórmula ou na minha abordagem?

    
por branches 29.07.2015 / 17:36

1 resposta

2

Assim como a observação de Clif, sua fórmula atual seria, de qualquer forma, adequada apenas para fornecer um único retorno, não a lista que você fornece.

Para isso, seria necessário (supondo que você tenha o Excel 2010 ou posterior):

=INDEX(ORIGINAL_ARRAY!$A:$A,AGGREGATE(15,6,ROW(ORIGINAL_ARRAY!$B$2:$B$10)/ORIGINAL_ARRAY!$B$2:$B$10,ROWS($1:1)))

e copiado para baixo.

Quanto a mascarar erros, então, assumindo que o exemplo que você dá é representativo de sua configuração real - em que há apenas uma dúzia de linhas nos dados de origem - você pode ter uma configuração IFERROR ineficiente, viz:

=IFERROR(INDEX(ORIGINAL_ARRAY!$A:$A,AGGREGATE(15,6,ROW(ORIGINAL_ARRAY!$B$2:$B$10)/ORIGINAL_ARRAY!$B$2:$B$10,ROWS($1:1))),"")

Se o intervalo de dados em questão é de fato bastante grande, então será muito preferível usar uma célula adicional em algum lugar da planilha, por exemplo. D1, em que uma única fórmula é usada para determinar o número esperado de retornos, a saber:

=COUNTIF(ORIGINAL_ARRAY!B2:B10,TRUE)

que pode então ser referenciado na própria fórmula principal, por exemplo:

=IF(ROWS($1:1)>D$1,"",INDEX(ORIGINAL_ARRAY!$A:$A,AGGREGATE(15,6,ROW(ORIGINAL_ARRAY!$B$2:$B$10)/ORIGINAL_ARRAY!$B$2:$B$10,ROWS($1:1))))

e será muito mais eficiente do que a configuração do IFERROR, por razões (se você estiver interessado) explicadas aqui:

Procure um valor em uma lista e retorne TODOS os valores correspondentes

Atenciosamente

    
por 29.07.2015 / 23:05