Procure um valor em uma lista e retorne TODOS os valores correspondentes múltiplos [closed]

1

A resposta básica à minha pergunta é fornecida aqui: Como procurar um valor em uma lista e retornar vários valores correspondentes . No entanto, depois que a fórmula é inserida, preciso arrastar para baixo ou copiar / colar a fórmula para obter o restante dos valores correspondentes. Para citar o artigo:

When you enter or fill this formula in subsequent cells, the formula returns the subsequent corresponding values

No entanto, não tenho como saber quantos valores esperar e, portanto, não há como saber até onde copiar / colar a fórmula. Copiando e colando todo o caminho até o Excel.

EDITAR Se meus dados se parecem com isso:

Tag | Loc | Time
---|---|----
NN | IN | 7
CD | OUT | 4
VB | OUT | 12
NN | OUT | 4
NN | IN | 2
NN | OUT | 6
VB | OUT | 23
VB | OUT | 4
VB | IN | 6

Eu gostaria de realizar testes-t para cada tag, comparando os tempos de IN vs OUT. Usando a fórmula INDEX, eu poderia, hipoteticamente, puxar todos os tempos para, por ex. NN & OUT.

    
por Adam_G 17.09.2014 / 00:31

2 respostas

2

Acho que a questão aqui é que a sugestão dada nesse link para lidar com os resultados de fórmulas em linhas além do número de retornos esperados é simplesmente envolver a fórmula em algum tipo de cláusula IFERROR.

No entanto, essa configuração é extremamente ineficiente, especialmente se o conjunto de dados em questão é dinâmico e potencialmente expansível.

O ponto é que, se você tiver uma configuração como:

= IFERROR ([ some_large_array_formula ], "")

que se destina a ser copiado para baixo um número suficiente de linhas, de modo a encapsular todos os retornos desejados, então você será confrontado com duas opções.

Primeiramente, você pode realizar alguns cálculos para determinar com precisão quantos retornos você terá em um determinado momento e, em seguida, arrastar essa fórmula para baixo nesse número de linhas. Obviamente, isso não é o ideal, ainda menos se você tiver, como eu disse, um conjunto de dados que muda dinamicamente.

Em segundo lugar, podemos copiar as fórmulas para um número arbitrariamente grande de linhas, garantindo a cobertura de todos os retornos possíveis, mesmo que nosso conjunto de dados seja expandido em algum momento futuro e, portanto, não precisemos nos preocupar novamente.

Obviamente, este segundo método é preferível na prática. O problema com a construção IFERROR (pior ainda se você estiver em 2003 ou antes e tiver que usar uma cláusula IF (ISERROR) repetida) é que, nas linhas para as quais a fórmula é copiada além do que é efetivamente necessário, não há nada para evitar que a grande fórmula de matriz com muitos recursos calcule desnecessariamente.

O ponto é que, na construção acima, mesmo em linhas além daquelas que contêm nosso último retorno esperado, o Excel ainda precisa gastar todo o recurso para calcular a parte da fórmula de matriz antes de decidir se ela é de fato erro ou não.

Longe, muito melhor do que esta inactiva abordagem IFERROR - que infelizmente é quase universalmente recomendada para esta configuração em torno das várias fontes na internet - é, como James salienta, usar uma única célula "auxiliar" para determinar primeiro o número de linhas que esperamos ter retornado e, em vez disso, faça referência a isso na fórmula.

Assim, por exemplo, se os dados postados estavam em A1: C10 (com cabeçalhos na linha 1) e colocamos, e. NN em E1 e OUT em F1, primeiro introduziríamos uma única fórmula não-array em, e. G1:

= SUMPRODUCT (0+ (A2: A10 = E1), 0 + (B2: B10 = F1))

A ** fórmula de matriz **** em nossa primeira célula escolhida seria:

= SE (LINHAS ($ 1: 1) > $ G $ 1, "", ÍNDICE ($ C $ 2: $ C $ 10, PEQUENAS (SE ($ A $ 2: $ A $ 10 = $ E $ 1, IF ($ B $ 2: $ B $ 10 = $ F $ 1, ROW ($ C $ 2: $ C $ 10) -MIN (LINHA ($ C $ 2: $ C $ 10)) + 1)), LINHAS ($ 1: 1))))

e copiado conforme necessário.

Concedido, ainda temos a questão de até onde copiar essa fórmula. E, embora tenhamos um cálculo para determinar o número necessário de linhas, ainda não queremos reajustar manualmente o número de células que contêm fórmulas sempre que quisermos atualizar os resultados. Este deve ser um trabalho inicial único.

Eu certamente não recomendaria copiar até o final da planilha. No entanto, desde que um limite superior adequadamente grande possa ser escolhido, então não deve importar muito em termos de desempenho se acabarmos com até milhares de células estranhas contendo fórmulas. A razão de ser, e a enorme diferença entre este set-up e a abordagem "preguiçosa" de IFERROR, que aqui a cláusula inicial:

= SE (LINHAS ($ 1: 1) > $ G $ 1, ""

significa que, em linhas além do número esperado de retornos, a cláusula IF retorna TRUE e, portanto, um espaço em branco é retornado. E a parte interessante sobre a função IF é que, se a cláusula passada para ela for TRUE, a parte FALSE - aqui uma fórmula de matriz grande e cheia de recursos - nem sequer é considerada para cálculo.

Este não é o caso da versão IFERROR, que continua a se distanciar, alheia ao fato de que seus cálculos são desnecessários e um fardo para os recursos.

Atenciosamente

** As fórmulas das matrizes não são inseridas da mesma maneira que as fórmulas 'padrão'. Em vez de pressionar apenas ENTER, você primeiro pressiona CTRL e SHIFT, e só então pressiona ENTER. Se você fez isso corretamente, você notará que o Excel coloca as chaves {} ao redor da fórmula (embora não tente inseri-las manualmente).

    
por 17.09.2014 / 09:30
0

Eu diria formatar seus dados em uma tabela (Home > Formatar como tabela) ou criar um intervalo com nome dinâmico sobre seus dados. Isso resolve o problema de não saber quantos dados você terá, pois o intervalo / tabela crescerá à medida que novos dados forem adicionados, enquanto você ainda pode se referir ao intervalo / tabela pelo nome.

tldr: format as table, se esta for a primeira tabela em sua pasta de trabalho, a tabela terá o nome "Table1"

Minha sugestão seria criar uma tabela dinâmica neste ponto (usando o nome da sua tabela / intervalo como a fonte) e colocar "Tag" em Row Labels, "Loc" nos rótulos Column e "Time" em Values. Você receberá dados com esta aparência:

. IN OUT CD 4 NN 9 10 VB 6 39

Você pode então adicionar uma fórmula simples à direita e arrastar para baixo para descobrir a diferença entre IN e OUT

    
por 17.09.2014 / 12:10