web-dev-qa-db-fra.com

Est-il possible d'utiliser une boucle dans Google Spreadsheets?

J'ai le document suivant:

+---+-----------+
|   | A         |
+---+-----------+
| 1 | Foo (100) |
| 2 | Bar (30)  |
| 3 | Baz (50)  |
+---+-----------+

J'aimerais utiliser un REGEXEXTRACT pour extraire les nombres de chaque ligne de la colonne A, puis les totaliser. Par exemple:

=SUM(REGEXEXTRACT(A1, "\d+"), REGEXEXTRACT(A2, "\d+"), REGEXEXTRACT(A3, "\d+"))

Le problème est que cette liste va s'allonger et que pour chaque ligne, je devrais allonger encore la formule. Idéalement, je veux un moyen de boucler sur tous les éléments tels que:

=SUM_LOOP(A1:A3, REGEXEXTRACT(CELL, "\d+"))

... où le premier argument est la plage à boucler et CELL est la cellule actuelle de la boucle.

Je sais que je peux facilement le faire en créant une colonne à droite à l'aide d'une formule telle que =REGEXEXTRACT(A1, "\d+"), puis en la développant vers le bas et en effectuant un SOMME sur cette nouvelle colonne, mais j'aimerais éviter de créer une nouvelle colonne. si possible.

5
Senseful

Si vous avez un tableau de lignes avec vos valeurs, vous pouvez utiliser cette fonction personnalisée pour calculer la somme des nombres (vous ne pouvez pas utiliser REGEXEXTRACT dans l'éditeur de script, vous devez utiliser la fonction RegExp de JavaScript. ):

function sumLoop(v) {
  var sum = 0;

  for (var c = 0; c < v[0].length; c++) {
    var pattern = new RegExp("\\d+", "gi");  
    sum += parseFloat(pattern.exec(v[0][c]));
  } 

  return sum;
}​

Pour une raison quelconque, si dans la fonction ci-dessus, nous demandons le nombre de lignes (v.length comme ils le mentionnent dans forums Google ), une erreur est renvoyée.

Donc, afin de voir l'action, procédez comme suit, après avoir copié la fonction ci-dessus dans l'éditeur de script:

+---+-----------+----------+----------+-----------------+
|   | A         |  B       | C        | D               |
+---+-----------+----------+----------+-----------------+
| 1 | Foo (100) | Bar (30) | Baz (50) | =sumLoop(A1:C1) |
+---+-----------+----------+----------+-----------------+
5
Lipis

Un type de comportement semblable à une boucle peut être obtenu à l'aide de formules matricielles. Vous pouvez entrer la formule suivante:

=SUM(ARRAYFORMULA(VALUE(REGEXEXTRACT(B2:B4;"\d+"))))

dans une cellule pour y avoir calculé la valeur dont vous avez besoin dans la plage que vous voulez.

8
Adam Badura