Para cada linha, você deseja somar um intervalo que seja um subconjunto dessa linha, determinado pelo “mês inicial” na coluna B. Vamos começar pegando sua descrição textual do intervalo e expressando-a de maneira fórmula. Para fazer isso, precisamos converter os nomes dos meses em números de 1 a 12. Não sei como fazer isso diretamente, mas é fácil extrair o número do mês de uma data , e podemos transformar um nome de mês em uma data, acrescentando um número (dia do mês). Por exemplo,
- se
B2
forMarch
, então -
B2 & "1"
éMarch1
e -
MONTH(B2 & "1")
é3
. - Se isso não funcionar na sua versão do Excel, tente
MONTH(DATEVALUE(B2 & "1"))
.
OK, a pergunta pede para somar os meses número do mês −3 até número do mês +3.
Por exemplo, para o usuário 2 (linha 3), onde B3
é “abril” (ou seja, 4),
queremos a soma de janeiro (1) até julho (7), já que 4−3 = 1 e 4 + 3 = 7.
Mas há um problema: nem todos os sete meses necessários estão garantidos na folha.
Para o usuário 1 (linha 2), B2
é “março”, então queremos dezembro (do ano anterior) até junho.
Os dados do ano anterior e do ano seguinte não estão disponíveis
então truncamos o nosso intervalo para janeiro a junho.
Fazemos isso forçando o mês inicial a não ser menor que 1 e o mês final a não mais de 12.
Se fizermos isso com uma fórmula monolítica, será praticamente ilegível. É muito mais claro usar "colunas auxiliares" para armazenar valores intermediários. Então, defina
-
P2
- número do mês correspondente aB2
:%=MONTH(B2 & "1")
-
Q2
- início do mês do intervalo:
=MAX(P2-3, 1)
-
R2
- mês final do intervalo:=MIN(P2+3, 12)
Destacar as células que selecionamos é um truque e pode nos ajudar a verificar se estamos fazendo o que queremos fazer. Definir um formato condicional com uma fórmula de
=AND((COLUMN())-2>=$Q2, (COLUMN()-2)<=$R2)
na nossa matriz de dados, temos isto:
(Aimageméumlinkparaumacópiamaiordesimesma.)
UmaboaferramentaparagerarintervalosdinâmicosnoExceléoOFFSET
função:
OFFSET(reference, rows, cols, [height], [width])
que identifica uma regi rectangular de culas (possivelmente uma cula ica;
isto é, um retângulo 1x1; possivelmente maior) pela sua posição em relação a alguma outra célula.
Por exemplo, OFFSET(B2, 0, 1, , 6)
identifica o intervalo C2:H2
, porque
- Da célula
B2
, descendo 0 linhas e a coluna 1 direita leva você paraC2
, - A altura é padronizada como 1, portanto, o intervalo é totalmente na linha 2 e
- A largura é 6:
C2
,D2
,E2
,F2
,G2
eH2
, ouC2:H2
para resumir, são seis colunas.
Bem, a largura do intervalo é simplesmente o número da coluna final menos o número da coluna inicial mais 1. Então o resultado que você quer é simplesmente
=SUM(OFFSET(B2, 0, Q2, , R2-Q2+1))
E podemos colocar isso na coluna O
:
Aquiestáotextoacima,emformadetexto,paraquevocêpossacopiá-loecolá-lo:
UsernameStartMoJanuaryFebruaryMarchAprilMayJuneJulyAugustSeptemberOctoberNovemberDecemberTheAnswerAndyMarch102202402100220024002100022000240002100002200002400002=SUM(OFFSET(B2,0,Q2,,R2-Q2+1))=MONTH(B2&"1") =MAX(P2-3,1) =MIN(P2+3,12)
Bob April 103 203 403 1003 2003 4003 10003 20003 40003 100003 200003 400003 =SUM(OFFSET(B3,0,Q3,,R3-Q3+1)) =MONTH(B3&"1") =MAX(P3-3,1) =MIN(P3+3,12)
Charlie April 104 204 404 1004 2004 4004 10004 20004 40004 100004 200004 400004 =SUM(OFFSET(B4,0,Q4,,R4-Q4+1)) =MONTH(B4&"1") =MAX(P4-3,1) =MIN(P4+3,12)
Você pode precisar colá-lo no Word como texto e copiá-lo e colá-lo no Excel.