Ajuda do Excel - É possível retornar o número da coluna da segunda partida dentro de uma matriz horizontal?

1

Estou tentando retornar o número da coluna que corresponde à segunda ocorrência de zero na tabela a seguir:

B       C       D       E       F      G
2       0       0       3       4      9

Por exemplo, a fórmula desejada retornará uma coluna D representando 3.

Se isso não for possível para retornar o número da coluna dentro da matriz, é possível retornar um 4 (número da coluna dentro da planilha)?

Obrigado pela ajuda avançada.

    
por laxpro2001 27.10.2015 / 18:24

2 respostas

2

Tenho certeza de que alguém terá uma maneira muito mais simples de fazer isso, mas aqui está uma resposta rápida que eu tenho hackeado juntos.

Ele exige que você especifique o intervalo (B1: G1 em seu exemplo) em algumas fórmulas MATCH e também para especificar esse intervalo novamente no formato R1C1 para uso na função INDIRECT .

=MATCH(0,INDIRECT("R1C"&MATCH(0,B1:G1,0)+1&":R1C7",0),0)+MATCH(0,B1:G1,0)

Passo a passo

Começamos por encontrar a coluna que contém seu primeiro valor correspondente. Essa é a fórmula: MATCH(0,B1:G1,0) .

Então, uma vez que sabemos que a primeira correspondência está na coluna C, podemos executar outro MATCH que aparece no intervalo à direita da Coluna C - isto é, Coluna D em diante. Isso é o que o INDIRECT está fazendo. Ele usa a referência R1C1 para que possa receber seu primeiro MATCH como entrada: INDIRECT("R1C"&MATCH(0,B1:G1,0)+1&":R1C7",0) .

Então, executamos nosso segundo MATCH assim: MATCH(0,INDIRECT("R1C"&MATCH(0,B1:G1,0)+1&":R1C7",0),0) .

Isso produzirá o número da coluna contando a partir da coluna D (ou seja, 1 neste caso). Então, precisamos adicionar o número de colunas que pulamos à esquerda, para obter nosso número final - isso é apenas uma repetição da primeira PARTIDA: +MATCH(0,B1:G1,0) .

Observação - para flexibilidade, use INDEX () ou OFFSET () em vez de INDIRECT ()

Blm levanta pontos excelentes sobre a inflexibilidade de usar INDIRECT - leia a resposta propondo INDEX ou OFFSET .

    
por 27.10.2015 / 19:03
2

Por demanda popular ... :-), além de alguns problemas com a versão INDIRECT , que eu descrevo abaixo.

Primeiro, duas outras soluções. As únicas diferenças substantivas são como o segundo intervalo a pesquisar é calculado. Andi usou INDIRECT , eu uso INDEX e OFFSET , respectivamente. Uma outra pequena diferença que você notará, em vez de codificar o valor a ser pesquisado, eu obtenho de uma célula, o que torna mais fácil testar as fórmulas variando o número que está sendo pesquisado. Eu incluí todos os três aqui, então é fácil vê-los próximos um do outro, o primeiro é copiado da resposta do Andi (com o 0 codificado permanentemente substituído pela mesma referência de célula que eu uso nos outros, B3):

=MATCH(B3,INDIRECT("R1C"&MATCH(B3,B1:G1,0)+1&":R1C7",0),0)+MATCH(B3,B1:G1,0)
=MATCH(B3,INDEX(B1:G1,0,MATCH(B3,B1:G1,0)+1):G1,0)+MATCH(B3,B1:G1,0)
=MATCH(B3,OFFSET(B1:G1,0,MATCH(B3,B1:G1,0)):G1,0)+MATCH(B3,B1:G1,0)

O segundo argumento para o primeiro (na fórmula, corresponde à segunda ocorrência do número de pesquisa) MATCH é a diferença:

INDIRECT("R1C"&MATCH(B3,B1:G1,0)+1&":R1C7",0)
INDEX(B1:G1,0,MATCH(B3,B1:G1,0)+1):G1
OFFSET(B1:G1,0,MATCH(B3,B1:G1,0)):G1

Andi descreveu o primeiro. O segundo e o terceiro trabalho calculam uma referência à célula após a correspondência (o INDEX(...) e OFFSET(...) ) e, em seguida, estendem isso para um intervalo que termina com a última célula (a :G1 part). Portanto, se pesquisar por 0, MATCH(B3,B1:G1,0) retornará 2, então a versão INDEX se tornará:

INDEX(B1:G1,0,2+1):G1
INDEX(B1:G1,0,3):G1
D1:G1

A versão OFFSET se comporta de maneira semelhante.

Embora os três sejam equivalentes, há duas coisas que não me permitiriam usar a versão INDIRECT . A primeira é que, porque calcula uma coluna absoluta, não funciona em circunstâncias ligeiramente diferentes. Digamos que o valor final na tabela seja alterado de 9 para 3. Então, se colocarmos 3 em B3 para procurar o segundo 3, todas as fórmulas devem retornar 6. No entanto, a versão INDIRECT retorna 5. É por isso . Nesse caso, MATCH(B3,B1:G1,0) retorna 4, então o INDIRECT se torna:

 INDIRECT("R1C"&4+1&":R1C7",0)
 INDIRECT("R1C"&5&":R1C7",0)
 INDIRECT("R1C5:R1C7",0)

que é equivalente a E1: G1. No entanto, a primeira célula de E1: G1 é a célula que contém os 3 primeiros, portanto, o MATCH encontrará apenas os 3 primeiros novamente e retornará 1, que é adicionado ao primeiro valor MATCH (4), retornando 5.

A questão é que o cálculo da coluna é absoluto e não leva em conta o fato de que a tabela que está sendo pesquisada começa na segunda coluna. Assim, mesmo quando pesquisando por 0, a fórmula INDIRECT está "errada", em que está encontrando o primeiro 0 duas vezes, mas parece que funciona porque o segundo 0 está imediatamente no primeiro 0, então o MATCH está para o segundo 0 retorna 1, que é a diferença entre os números das colunas dos dois 0s. Quando a diferença entre os números das colunas dos dois números pesquisados não for 1, a fórmula INDIRECT retornará o valor errado.

Isso é solucionável ao tornar a referência de coluna relativa (e supondo que a fórmula esteja na mesma coluna que o início da tabela):

=MATCH(B3,INDIRECT("R1C["&MATCH(B3,B1:G1,0)&"]:R1C7",0),0)+MATCH(B3,B1:G1,0)

Agora, o INDIRECT é:

 INDIRECT("R1C["&4&"]:R1C7",0)
 INDIRECT("R1C[4]:R1C7",0)

que é F1: G1, então agora o segundo MATCH começará a pesquisar na célula à direita da primeira correspondência e retornará 2, resultando em um total de 6, o que é correto.

Isso funciona, mas ainda há um problema relacionado ao meu parênteses "supondo que a fórmula esteja na mesma coluna que o início da tabela". A versão INDIRECT (mesmo a fixa) é bastante frágil. Por exemplo, se eu inserir uma nova linha acima da tabela de números, as versões INDEX e OFFSET continuarão funcionando, porque o Excel atualizará automaticamente todas as referências. Mas como todas, exceto uma das referências na versão INDIRECT , são texto, o Excel não pode atualizá-las, então elas continuarão a se referir à primeira linha, que agora é outra. Se você remover a primeira coluna ou adicionar colunas adicionais à esquerda da tabela, haverá problemas semelhantes. Então, nesse caso, eu provavelmente optaria pela versão INDEX ou OFFSET , apenas para "testar futuramente" a planilha um pouco.

    
por 27.10.2015 / 22:40