web-dev-qa-db-fra.com

Somme Google Spreadsheet qui se termine toujours sur la cellule ci-dessus

Comment créer une somme Google Spreadsheet qui se termine toujours sur la cellule ci-dessus, même lorsque de nouvelles cellules sont ajoutées? J'ai plusieurs calculs de ce type à faire sur chaque colonne afin que des solutions comme celle-ci ne m'aident pas.

Exemple: 

Sur la colonne B, j'ai plusieurs gammes dynamiques qui doivent être additionnées. B1..B9 doit être additionné à B10 et B11..B19 à B20. J'ai des dizaines de tels calculs à faire. De temps en temps, j'ajoute des lignes en dessous de la dernière ligne additionnée et je veux qu'elles soient ajoutées à la somme. J'ajoute une nouvelle ligne (appelez-la 9.1) avant la ligne 10 et un nouveau brut (appelons-la 19.1) avant la ligne 20. Je veux que B10 contienne la somme de B1 à B9.1 et que B20 contienne la somme de B11: B19.1. 

Sur Excel, j’ai la fonction offset qui me plait comme un charme. Mais comment le faire avec google tableur? J'ai essayé d'utiliser des formules comme celle-ci:

=SUM(B1:INDIRECT(address(row()-1,column(),false)))   # Formula on B10
=SUM(B11:INDIRECT(address(row()-1,column(),false)))  # Formula on B20

Mais sur Google Spreadsheet, tout ce que cela donne est une erreur #nom.

J'ai perdu des heures à essayer de trouver une solution, peut-être que quelqu'un peut calmer? S'il vous plaît aviser

Amnon

31
Druvision

NOTE Après avoir testé cette réponse, cela ne fonctionnera que si la somme est dans une colonne différente en raison d'une erreur de dépendance circulaire. Sinon, la solution est valide.

C'est un peu d'algèbre, mais nous pouvons tirer parti de la traînée du coin inférieur droit de Spreadsheets.

=SUM(X:X) - SUM(X2:X)

Où X est la colonne avec laquelle vous travaillez et X2 est votre point fin. Faites glisser la formule vers le bas et Sheets incrémentera le X2, modifiant ainsi le point de fin.

* Vous avez mentionné que vous aviez des dizaines de calculs à effectuer. Donc, afin de répondre exactement à vos besoins, nous soustrayons votre dernière somme pour obtenir la plage "moyenne" que nous recherchions.

par exemple.

B1..B9 doit être additionné sur B10 et B11..B19 doit être additionné sur B20

En raison de l'erreur de dépendance circulaire mentionnée précédemment, je ne peux pas la résoudre exactement et mettre la somme sur la même ligne, mais cela pourrait fonctionner dans d'autres cas où la somme doit être stockée dans une colonne différente.

=SUM(B:B) - SUM(B9:B) //Formula on C10 (Sum of B1..B9)
=SUM(B:B) - SUM(B19:B) - B10 // Formula on C20 (Sum of B11..B19)
4
Moore's Qubits

Ceci est basé sur @PsychoFish, voici la solution:

=SUM(INDIRECT(SUBSTITUTE(ADDRESS(1,COLUMN(),4),"1","")&"3:"&ADDRESS(ROW()-1,COLUMN(),4)))

Remplacez simplement le "3:" pour que la ligne commence à additionner.

@PsychoFish est correct, mais ne peut pas être glissé et copié car la colonne est littérale et codée en dur, et @Druvision était dans la bonne direction mais avait tort… glisser les formules encore et encore. 

2
smorhaim

Syntaxe générale:

=SUM(INDIRECT(cell_reference_as_string1 &":"& cell_reference_as_string2)

avec par exemple:

cell_reference_as_string1 = ADDRESS(ROW(),COLUMN(),4)
cell_reference_as_string2 = ADDRESS(ROW()-1,COLUMN(),4)
1
abernier

J'aime comment @abernier décrit la solution générale. Jusqu'à présent, seule la notation A1 basée sur l'alphabet (A étant la première colonne, 1 étant la première ligne) est utilisée. Cela ne cesse de me troubler, surtout quand on pense au nombre de colonnes laissées sur une autre colonne. J'aime beaucoup mieux la notation R1C1 basée sur les nombres. Pour utiliser la notation R1C1 pour INDIRECT , vous devez indiquer FALSE comme suit:

=SUM(INDIRECT("R1C"&COLUMN()&":R"&(ROW()-1)&"C"&COLUMN(), FALSE))

J'espère que vous trouvez cela utile aussi.

1
knugie

Vous faites cela plus difficile que nécessaire. Je laisse juste quelques lignes vides au-dessus par "somme" (vous pouvez les formater pour qu'elles soient remplies de couleur ou quelque chose qui les empêche de les utiliser par inadvertance), puis ajoutez simplement vos nouvelles lignes juste au-dessus de ces lignes spéciales.

0
user7255446