it-swarm.com.de

Ist es möglich, eine Schleife in Google Spreadsheets zu verwenden?

Ich habe folgendes Dokument:

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

Ich möchte ein REGEXEXTRACT verwenden, um die Zahlen aus jeder Zeile in Spalte A zu extrahieren und sie dann zu summieren. Zum Beispiel:

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

Das Problem ist, dass diese Liste wächst und ich die Formel für jede Zeile noch länger machen muss. Im Idealfall möchte ich eine Möglichkeit zum Durchlaufen aller Elemente, z. B .:

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

... wobei das erste Argument der zu durchlaufende Bereich ist und CELL die aktuelle Zelle in der Schleife ist.

Ich weiß, dass ich dies leicht tun kann, indem ich eine Spalte rechts mit einer Formel wie =REGEXEXTRACT(A1, "\d+") erstelle und dann nach unten expandiere und eine SUMME für diese neue Spalte durchführe, aber ich möchte das Erstellen einer neuen Spalte vermeiden wenn möglich.

5
Senseful

Wenn Sie ein Zeilenarray mit Ihren Werten haben, können Sie diese benutzerdefinierte Funktion verwenden, um die Summe der Zahlen zu berechnen (Sie können REGEXEXTRACT im Skript-Editor nicht verwenden, stattdessen müssen Sie die Funktion RegExp von JavaScript verwenden ):

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;
}​

Wenn wir in der obigen Funktion aus irgendeinem Grund nach der Anzahl der Zeilen fragen (v.length, wie in Google Forums angegeben), wird ein Fehler zurückgegeben.

Gehen Sie folgendermaßen vor, um die Aktion anzuzeigen, nachdem Sie die obige Funktion im Skript-Editor kopiert haben:

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

Eine Art schleifenartiges Verhalten kann mit Array-Formeln erreicht werden. Sie können folgende Formel eingeben:

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

in einer Zelle, damit dort der Wert berechnet wird, den Sie in dem gewünschten Bereich benötigen.

8
Adam Badura