Isso é bastante simples de fazer no Excel com uma fórmula que opera na tabela dinâmica.
Com as duas tabelas configuradas assim
insiraaseguintefórmulaemJ2
ectrl-enter/copy-paste/fill-down&right/autopreenchimentonorestantedascélulasdatabela:
=
IF(
J$1=$I2,
"",
COUNTIFS(
INDEX($A$1:$F$6,ROW($A$1:$F$6),MATCH(J$1,$A$1:$F$1,0)):INDEX($A$1:$F$6,1+ROWS($A$1:$F$6)-ROW($A$1:$F$6),MATCH(J$1,$A$1:$F$1,0)),
1,
INDEX($A$1:$F$6,ROW($A$1:$F$6),MATCH($I2,$A$1:$F$1,0)):INDEX($A$1:$F$6,1+ROWS($A$1:$F$6)-ROW($A$1:$F$6),MATCH($I2,$A$1:$F$1,0)),
1
)
)
Explicação:
O primeiro argumento da função COUNTIFS()
é a coluna gerada dinamicamente da tabela dinâmica correspondente ao cabeçalho da coluna da tabela de saída. É um pouco mais fácil de entender, se olharmos para as etapas intermediárias avaliadas (para a célula L2
):
INDEX($A$1:$F$6,ROW($A$1:$F$6),MATCH(L$1,$A$1:$F$1,0)):INDEX($A$1:$F$6,1+ROWS($A$1:$F$6)-ROW($A$1:$F$6),MATCH(L$1,$A$1:$F$1,0))
→ INDEX($A$1:$F$6,1,MATCH("E201",$A$1:$F$1,0)):INDEX($A$1:$F$6,6,MATCH("E201",$A$1:$F$1,0))
→ INDEX($A$1:$F$6,1,4):INDEX($A$1:$F$6,6,4)
→ $D$1:$D$6
(Observe que os segundos argumentos de cada INDEX()
são apenas as linhas iniciais e finais totalmente dinâmicas, respectivamente, da tabela dinâmica.)
Da mesma forma, para o terceiro argumento da função COUNTIFS()
, mas desta vez a coluna gerada dinamicamente da tabela dinâmica corresponde ao cabeçalho linha da tabela de saída. Para a célula L2
, ela é avaliada como $B$1:$B$6
.
Assim, a função COUNTIFS()
em L2
torna-se
COUNTIFS($D$1:$D$6,1,$B$1:$B$6,1)
qual é o modo padrão de contar o número de linhas (alunos) onde ambas colunas contêm 1
(ou seja, o aluno foi inscrito em ambas as classes).
A função IF()
de encapsulamento está lá apenas para garantir que as células diagonais estejam em branco.