Então eu descobri que isso foi feito por essa fórmula. Eu substituirei as variáveis com sua explicação. É pfooo longo, mas na verdade é bem fácil. Por favor, ignore as versões checas das funções, KDYŽ
= IF
, ŘÁDEK
= ROW
e ŘÁDKY
= ROWS
.
IFERROR(INDEX(Prima;SMALL(KDYŽ(A$1=Prima[Blok 1];ŘÁDEK(Prima[Blok 1])-3);ŘÁDKY(A$3:A3));1);
IFERROR(INDEX(Sekunda;SMALL(KDYŽ(A$1=Sekunda[Blok 1];ŘÁDEK(Sekunda[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1));1);
IFERROR(INDEX(TercieA;SMALL(KDYŽ(A$1=TercieA[Blok 1];ŘÁDEK(TercieA[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1)-COUNTIF(Sekunda[Blok 1];A$1));1);
IFERROR(INDEX(TercieB;SMALL(KDYŽ(A$1=TercieB[Blok 1];ŘÁDEK(TercieB[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1)-COUNTIF(Sekunda[Blok 1];A$1)-COUNTIF(TercieA[Blok 1];A$1));1);
IFERROR(INDEX(Kvarta;SMALL(KDYŽ(A$1=Kvarta[Blok 1];ŘÁDEK(Kvarta[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1)-COUNTIF(Sekunda[Blok 1];A$1)-COUNTIF(TercieA[Blok 1];A$1)-COUNTIF(TercieB[Blok 1];A$1));1);
IFERROR(INDEX(KvintaA;SMALL(KDYŽ(A$1=KvintaA[Blok 1];ŘÁDEK(KvintaA[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1)-COUNTIF(Sekunda[Blok 1];A$1)-COUNTIF(TercieA[Blok 1];A$1)-COUNTIF(TercieB[Blok 1];A$1)-COUNTIF(Kvarta[Blok 1];A$1));1);
IFERROR(INDEX(KvintaB;SMALL(KDYŽ(A$1=KvintaB[Blok 1];ŘÁDEK(KvintaB[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1)-COUNTIF(Sekunda[Blok 1];A$1)-COUNTIF(TercieA[Blok 1];A$1)-COUNTIF(TercieB[Blok 1];A$1)-COUNTIF(Kvarta[Blok 1];A$1)-COUNTIF(KvintaA[Blok 1];A$1));1);
IFERROR(INDEX(Sexta;SMALL(KDYŽ(A$1=Sexta[Blok 1];ŘÁDEK(Sexta[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1)-COUNTIF(Sekunda[Blok 1];A$1)-COUNTIF(TercieA[Blok 1];A$1)-COUNTIF(TercieB[Blok 1];A$1)-COUNTIF(Kvarta[Blok 1];A$1)-COUNTIF(KvintaA[Blok 1];A$1)-COUNTIF(KvintaB[Blok 1];A$1));1);
IFERROR(INDEX(Septima;SMALL(KDYŽ(A$1=Septima[Blok 1];ŘÁDEK(Septima[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1)-COUNTIF(Sekunda[Blok 1];A$1)-COUNTIF(TercieA[Blok 1];A$1)-COUNTIF(TercieB[Blok 1];A$1)-COUNTIF(Kvarta[Blok 1];A$1)-COUNTIF(KvintaA[Blok 1];A$1)-COUNTIF(KvintaB[Blok 1];A$1)-COUNTIF(Sexta[Blok 1];A$1));1);
IFERROR(INDEX(Oktáva;SMALL(KDYŽ(A$1=Oktáva[Blok 1];ŘÁDEK(Oktáva[Blok 1])-3);ŘÁDKY(A$3:A3)-COUNTIF(Prima[Blok 1];A$1)-COUNTIF(Sekunda[Blok 1];A$1)-COUNTIF(TercieA[Blok 1];A$1)-COUNTIF(TercieB[Blok 1];A$1)-COUNTIF(Kvarta[Blok 1];A$1)-COUNTIF(KvintaA[Blok 1];A$1)-COUNTIF(KvintaB[Blok 1];A$1)-COUNTIF(Sexta[Blok 1];A$1)-COUNTIF(Septima[Blok 1];A$1));1);""
))))))))))
A parte principal é repetida várias vezes como um texto alternativo para a função IFERROR()
:
IFERROR(
INDEX(
<table range>;
SMALL(
IF(
<value to find>=<range in table to look in>;
ROW(<range in table to look in>)-<number of rows above the first row of the table>
);
ROWS(<first-cell-in-results-column-to-this-cell range>) <note here>
);
<column number (starting from 1) with the return value>
);
<alternative for IFERROR>
)
A fórmula acima, se os valores estiverem definidos corretamente, retornará todos os valores da coluna de retorno se o valor correto for encontrado no intervalo de pesquisa. Agora, se você precisar realizar o que eu precisava, ou seja, obter valores de várias tabelas em uma única lista, será necessário definir essa fórmula como a alternativa para o IFERROR
, uma vez para cada tabela de origem.
Isso é bom, mas não é a única coisa que precisamos fazer. Essa fórmula funciona internamente criando uma matriz de valores de retorno dentro de cada célula da lista e, em seguida, selecionando o Nth menor índice (a função INDEX
) a partir do qual N é definido pela função ROWS
dentro de INDEX
. Portanto, se não fizermos o seguinte, ao tentar continuar para a próxima tabela, tente novamente selecionar o índice N, mas já existem alguns valores das tabelas anteriores. Precisamos subtrair a quantidade de itens já presentes na tabela usando a função COUNTIF
. Então, depois de adicionarmos a segunda iteração da nossa fórmula, a coisa toda ficará assim:
IFERROR(
INDEX(
<table range>;
SMALL(
IF(
<value to find>=<range in table to look in>;
ROW(<range in table to look in>)-<number of rows above the first row of the table>
);
ROWS(<first-cell-in-results-column-to-this-cell range>)
);
<column number (starting from 1) with the return value>
);
IFERROR(
INDEX(
<table 2 range>;
SMALL(
IF(
<value to find>=<range in table 2 to look in>;
ROW(<range in table 2 to look in>)-<number of rows above the first row of the table 2>
);
ROWS(<first-cell-in-results-column-to-this-cell range>)
-COUNTIF(<range in table 2 to look in>; <value to find>)
);
<column number (starting from 1) with the return value>
);
<another iteration or something else>
)
)
E a cada nova iteração dentro do próximo IFERROR
, temos que adicionar outra função -COUNTIF
e MANTER os anteriores. Então, quando tudo estiver configurado, você pode simplesmente arrastar sua fórmula pelo painel e criar listas o quanto quiser!
Eu realmente espero que isso ajude alguém, se ele se sentir livre para deixar um comentário :) Eu coloquei algum tempo nesta fórmula e descobrir como as coisas funcionam, então se eu te economizei algum tempo, eu fiquei feliz em ajudar! :)