Ranking e Agendamento

1

Eu tenho uma lista de classificação de 7 profissionais. Rank 1 é o mais alto. Eu estou tentando resolver este problema onde eu sou capaz de encontrar o topo e o segundo mais alto disponível para cada mês. Por exemplo, em janeiro, Marcus tem um valor sob o seu nome, então eu quero que a coluna de melhor classificação mostre 20 e a segunda melhor classificação mostre Paul, pois ele tem um valor diferente de zero abaixo de seu nome. Eu quero que Anthony seja ignorado em janeiro, já que não há nenhum valor em seu nome.

    
por Deepak Ahuja 14.09.2018 / 16:31

1 resposta

0

Reorganizou sua tabela de resultados um pouco para permitir alguma flexibilidade. Veja a imagem na parte inferior para referência de célula e lay out. Em vez de dizer rank alto, e segundo rank, eu coloquei um cabeçalho acima do que disse RANK e, em seguida, colocar um número que representa a posição de classificação. Eu fiz isso para que você pudesse simplesmente arrastar a fórmula para a direita e puxar a classificação com base no número de classificação no cabeçalho.

Usando os intervalos de referência no exemplo abaixo, coloque a seguinte fórmula em J3 e copie para baixo e para a direita conforme necessário.

=IFERROR(INDEX($2:$2,AGGREGATE(15,6,COLUMN($B$3:$H$3)/(INDEX($B$3:$H$6,MATCH($I3,$A$3:$A$6,0),0)<>""),J$2)),"None")

UPDATE-AExplicação

permitedividiressafórmulaemseuscomponentesindividuais

Vamoscomeçarcomafórmulaagregadaquetemalgumasfórmulasenterradasnela:

AGGREGATE(15,6,COLUMN($B$3:$H$3)/(INDEX($B$3:$H$6,MATCH($I3,$A$3:$A$6,0),0)<>""),J$2)

A razão pela qual eu tirei essa parte é que tudo o que acontece dentro dela é como operações de array. Vamos examinar um pouco mais a parte da partida e depois voltar de lá:

MATCH($I3,$A$3:$A$6,0)

Esta fórmula vai retornar um inteiro representando onde o valor em I3 (janeiro) está localizado na lista $ A $ 3: $ A $ 6. Em outras palavras, estamos tentando descobrir em qual linha da sua tabela de referência você quer estar olhando. Neste caso, é 1 para o primeiro item da lista. Se janeiro não estivesse na lista, ele retornaria um erro que se propagaria pelas fórmulas.

Em seguida, vamos ver a fórmula do índice:

INDEX($B$3:$H$6,MATCH($I3,$A$3:$A$6,0),0)

INDEX(TABLE, ROWS TO GO DOWN, COLUMNS TO MOVE OVER)

Pense na fórmula do índice, defina sua tabela, desça as linhas Y e passe pelas colunas X. Nesse caso, $ B $ 3: $ H $ 6 representa seus dados sem rótulos de cabeçalho / linha. A fórmula MATCH está nos dizendo quantas linhas para descer. O 0 no final está fazendo um pequeno truque que é bem especial. Como você não pode passar por 0 colunas, neste caso especial de 0, INDEX interpreta isso como obter todas as colunas também conhecidas como a linha inteira da tabela definida. em uma nota similar acontece quando você usa 0 para quantas linhas descer.

O próximo passo é a operação e comparação da matriz.

INDEX() <> ""

Basicamente, ele passa por cada coluna e verifica se a entrada está em branco ou tem algo nela. Se estiver em branco, retornará FALSE e não em branco retornará TRUE. Agora, a razão pela qual fazemos isso é que o próximo passo será dividido pelo valor VERDADEIRO ou FALSO. O Excel converte VERDADEIRO e FALSO em 1 e 0, respectivamente, quando são enviados por meio de uma operação matemática. Então, duas coisas importantes acontecem aqui. Dividir por 1 não altera o valor de nada. essencialmente não faz nada. Dividir por 0 causa uma divisão por erro de 0, que irá se propagar. É realmente algo que precisamos. Agora, o que estamos realmente dividindo?

COLUMN($B$3:$H$3)

Isso ainda está na parte da matriz da fórmula agregada. Portanto, ele criará uma lista conforme o array percorre cada célula. Então, basicamente o que está acontecendo é que uma lista de números de coluna do SPREADSHEET está sendo gerada. e, mais importante, uma lista de números de colunas da planilha dividida por 1, que queremos, e dividida por 0, dando um erro que não queremos. Então, agora vamos ver o agregado:

AGGREGATE(15,6,COLUMN($B$3:$H$3)/(INDEX($B$3:$H$6,MATCH($I3,$A$3:$A$6,0),0)<>""),J$2)

AGGREGATE(Function number, OPERATION #, formula, Option value)

Basicamente, escolhemos a função 15, que classificará a lista de resultados da função e os ordenará do menor para o maior. A função 15 também força o agregado para executar operações de matriz. Nem todos os números de função serão. 6 informa agregado para IGNORE ERROR VALUES. Portanto, todos os erros divididos por 0 são ignorados, assim como uma correspondência de potencial não encontrada da função de correspondência. A fórmula discutida acima sobre o que está fazendo e o valor da opção nesse caso é qual posição do topo da lista você deseja. 1 retornaria o menor número, 2 o segundo menor número e assim por diante. Neste CASO eu configurei para olhar o número no cabeçalho em vez de codificá-lo na fórmula. No final, AGGREGATE, neste caso, retornará um único inteiro correspondente ao número da coluna SPREADSHEET que você está procurando. Então está de volta no ÍNDICE:

INDEX($2:$2,AGGREGATE(...))

Nesse caso, peguei toda a linha 2 como a tabela. Desde a sua única linha, não preciso fornecer linhas abaixo e colunas como na tabela anterior. Ele olha como uma lista e eu só preciso fornecer o quanto abaixo da lista eu quero ir. Portanto, como temos o número da coluna SPREADSHEET, precisamos examinar toda a linha da planilha em que o cabeçalho é, de forma que o número da coluna do spreadhseet retornado pelas linhas agregadas seja igual à tabela da planilha no índice.

No elenco onde ninguém é encontrado, ou seja, não há rank 1, Agregado retorna um erro. Para lidar com isso, usamos a função IFERROR. se não houver erro, a função opera normalmente e retorna seu resultado. Se houver um erro, ele retornará no nosso caso "nenhum".

    
por 14.09.2018 / 16:54