Tentativa de obter dados classificados e contados por trimestres de calendário no Excel

1

Estou tentando configurar uma fórmula no Excel que examina um intervalo de dados com datas especificadas em c7: c30 e as categorias Active- "A" e Completed- "C" em L7: L30. Eu estou tentando ter o excel olhar para cada linha individualmente e comparar se as datas são entre os trimestres especificados de 1/1/12 (B38) e 31/3/12 (C38) (o primeiro trimestre do ano), e se essa condição é atendida e, em seguida, conta aqueles que estão marcados com "A" para ativo.

Eu criei o seguinte que não funciona, pois é só olhar para a primeira data especificada e contar tudo marcado com "A" se a primeira data correspondeu às especificações do primeiro trimestre.

{= (SE (($ C $ 7: $ C30 > = $ B $ 39) * ($ C $ 7: C $ 30 < = $ C $ 39), COUNTIF ($ L $ 7: $ L30, "a") , 0))}

Por favor, ajude-me a descobrir o que há de errado com esta fórmula que não olhará para cada linha individualmente e, ao invés disso, contará todos os indicados com A se a primeira data for verdadeira com relação à declaração if apresentada.

Desculpe, não é bom em excel, qualquer ajuda é apreciada.

Obrigado!

    
por user128953 18.04.2012 / 18:29

1 resposta

2

Acho que você pode ter um problema com a maneira como estruturou a fórmula de matriz. Apenas descompactando sua declaração, você estará construindo uma matriz que terá quantas linhas você tiver, com cada linha contendo o resultado do COUNTIF ($ L $ 7: $ L30, "a") se a condição de data for satisfeita ou 0.

Como você não está aplicando nenhuma função de contagem envolvendo todo o lote, a função retornará toda a matriz, mas você só verá o primeiro resultado na célula, e é por isso que ela parece ser controlada apenas por uma célula.

Uma maneira alternativa de abordar isso seria a seguinte:

Seus três testes (para cada linha) são:

  • data > = B38
  • data < = C38
  • condition="a"

e você só quer contar onde todos os três são verdadeiros.

Com bastante propriedade, os valores verdadeiros são avaliados como 1 e falsos como 0, portanto, podemos usar uma operação de multiplicação para obter o que você deseja.

Então, para uma única linha, você gostaria de fazer o seguinte

(C7 >= B38) * (C7 <= C38) * (L7="a")

(e, obviamente, expandindo-o para C7: C30, etc., para cobrir suas linhas de interesse)

Para então recolher isso em um único valor, você quer envolver todo o lote em uma instrução SUM (), que irá apenas percorrer a lista e adicionar todos os valores juntos.

SUM( (C7:C30>B39) * (C7:C30<=C39) * (L7:L30="a") )

Além disso, apenas se você estivesse curioso para ver, volte à sua fórmula original e envolva-a com uma instrução sum (), e você verá o resultado como o número de vezes que seu status é definido como " um ", multiplicado pelo número de linhas que atendeu à condição de data.

(notando: as fórmulas de array usam um pouco de atenção inicial, mas uma vez que você percebe isso, elas funcionam bem. Originalmente eu li sobre elas em link que ainda é uma boa explicação se tudo ainda é confuso ..)

    
por 18.04.2012 / 21:05