J'aimerais une formule pour Google Sheets qui renvoie la somme des valeurs des dix cellules situées au-dessus de la cellule actuelle.
Autrement dit, si je suis sur C31
, je veux l’équivalent de =SUM(C20:C30)
. Cependant, je veux quelque chose qui fonctionnera indépendamment de la cellule actuelle.
Comme indiqué dans les commentaires, si vous copiez/collez votre formule, cela "déplacera" la formule (même si vous la copiez dans une autre cellule).
Ceci est le même comportement que Excel. Notez que vous pouvez également utiliser $
pour conserver la colonne (=$A1
) ou la ligne (=A$1
) ou les deux (=$A$1
).
Cela fera:
=SUM(INDIRECT(ADDRESS(ROW()-11;COLUMN();4) &":"& ADDRESS(ROW()-1;COLUMN();4)))
Collez-le dans la cellule de votre choix et la somme sera supérieure à 10, sans modification de la valeur.
La fonction ADDRESS
renvoie ne chaîne avec la référence de nom d'une cellule. Nous joignons deux références avec un ":" entre elles, ce qui nous donne ne chaîne comme "B5: B15". Nous leur fournissons la fonction INDIRECT
avec cette chaîne et celle-ci sera convertie en référence interne. Nous alimentons cette référence à la fonction SUM
et le tour est joué.
Attention au ";" caractères séparant les paramètres de la fonction. J'utilise une feuille de calcul portugaise brésilienne et le séparateur est le ";", mais il peut varier en fonction de la localisation de la feuille. Aux États-Unis, je pense qu'ils utilisent des virgules (","), donc si cela vous donne une erreur, essayez de changer ";" pour ",".
Une version simplifiée de @ diego nunes 'A:
=sum(offset(indirect(ADDRESS(ROW(),COLUMN())),-10,,10))
Cela peut être traîné et travailler n'importe où il y a dix rangées ou plus au-dessus.
Cependant, comme suggéré par @ JMax quelque chose comme =sum(a1:a10)
si écrit en A11 peut être copié et collé et (sauf dans les dix premières lignes) sera automatiquement ajusté en conséquence, donc copié à partir de A11 dire C14 deviendrait:
=sum(c4:c13)
(faites-le glisser cependant et il reste =sum(a1:a10)
).
essayer:
=SUM(QUERY(SORT(C2:C30; ROW(C2:C30)*ISNUMBER(C2:C30); 0); "select * limit 10"))
ceci est essentiellement basé sur un faux calcul où ROW
nombre est multiplié par le nombre (ISNUMBER
) dans la cellule pour savoir où se trouve le dernier nombre dans une plage donnée - C2:C30
. une sortie est ensuite reflétée avec SORT
, de sorte que la dernière valeur devient première à partir du haut, puis QUERY
prend tout cela et n’affiche que --- 10
lignes/valeurs qui sont passées dans SUM
comme on le voit sur l'image, cette solution prend la somme de:
6, 1, 5, 7, 8, 7, 6, 5, 9, 45
5, 3, 2, 5, 7, 9, 8, 5, 4, 1
1, 8, 1, 1, 2, 2, 2, 1, 9, 2
essayer:
=SUM(OFFSET(C2; MAX(ARRAYFORMULA(ROW(C2:C30)*--(C2:C30<>"")))-11; ; 10))
à nouveau basé sur un faux calcul où ROW
nombre est multiplié par la cellule qui n'est pas vide C2:C30<>""
afin de savoir où se trouve la dernière entrée d'un plage donnée C2:C30
. then ARRAYFORMULA
génère une liste de valeurs filtrées par MAX
pour intercepter toutes les erreurs (comme 25 * x
), puis inverser OFFSET
est utilisé à partir d'un point de départ/cellule C2 où est le début de la liste, qui est ensuite restreinte par les 10 dernières valeurs avec -11, , 10
et passé dans SUM
formule.
comme on le voit sur l'image, cette solution prend la somme de:
6, 1, 5, 7, 8, 7, 6, 5, 9, 45
5, x, 3, 2, x, 5, 7, 9, 8, 5
1, 8, 1, empty cell, 1, 2, 2, empty cell, 2, 1
essayer:
_=SUM(INDEX(C2:C30; MATCH(99999; C2:C30)-9):
INDEX(C2:C30; MATCH(99999; C2:C30)))
_
cette solution est basée sur une recherche de faux numéro 99999
dans la plage C2:C30
et à moins que ce numéro spécifique ne soit pas fourni, il n'y a pas - MATCH
so 2 INDEX
les listes sont générées tandis que l'une d'entre elles est légèrement décalée de deux lignes -9
quelle sorte annule toutes les valeurs laissées seulement les 10 dernières cellules à calculer par la formule SUM
.
comme on le voit sur l'image, cette solution prend la moyenne de:
6, 1, 5, 7, 8, 7, 6, 5, 9, 45
5, x, 3, 2, x, 5, 7, 9, 8, 5
1, 8, 1, empty cell, 1, 2, 2, empty cell, 2, 1