Google Tabellen - Eine Art "Zählenwenn"-Funktion

  • Hallo,


    ich versuche eine Funktion zu erstellen, die mir automatisch meine Liste durchgeht und die "X" pro Zeile zählt.


    Die Tabelle sieht in etwa so aus:


    Name Mo Di Mi Do Fr Sa So
    Mustermann 1 X X X 3
    Mustermann 2 X X 2
    Mustermann 3 X X X X X 5


    Das Problem ist: Bei meinem Script wird nur die erste Zeile gezählt und bei allen Zeilen der selbe Wert angezeigt. Das Ganze sieht fälschlicherweise dann so aus:


    Name Mo Di Mi Do Fr Sa So
    Mustermann 1 X X X 3
    Mustermann 2 X X 3
    Mustermann 3 X X X X X 3




    Ich hoffe ihr könnt mir weiterhelfen.


    Gruß Markus

  • Du setzt weder Gesamtzaehler noch Spaltenzaehler zurück.

    Nach while(zeile<100) {

    einfügen ( Da es kein vernünftiges Syntax-Highlighting gibt, lasse ich den Code mal weg.) :


    spalte=1;

    num=0;

  • Ich habe es so ähnlich mal versucht, aber dabei nur "num" zurückgesetzt.

    Vielen Dank, jetzt funktioniert es! So einfach wäre es gewesen. :)


    Gruß Markus

  • Wie gehe ich vor, wenn ich jetzt noch die Anzahl der "X" am Mo, Di, Mi,... wissen möchte?



    Name Mo Di Mi Do Fr Sa So
    Mustermann 1 X X X 3
    Mustermann 2 X X 2
    Mustermann 3 X X X X X 5
    2 3 1 1 1 1 1 10 (Summe)


    Gruß Markus

  • Vor das erste while:

    var sums = Array(0, 0,0,0,0,0,0,0); // falls Spalten fuer Wochentage von 1 - 7; ansonsten anpassen


    Und dies

    1. if(sheet2.getRange(zeile, spalte).getValue() == "X")
    2. {
    3. num++;
    4. }


    wird zu dem:

    1. if(sheet2.getRange(zeile, spalte).getValue() == "X")
    2. {
    3. num++;
    4. sums[spalte]++;
    5. }


    Am Ende dann einfach die Zeile mit den sums ausgeben.

  • Ich habe versucht das einzubauen, komme aber nicht weiter. Das Problem ist, dass die Zeilen von meiner Tabelle individuell sind. Es kann also jederzeit ein Name dazu kommen.


    Mein Code sieht derzeit so aus:


    Die Tabelle sieht derzeit so aus:

    html-seminar.de/woltlab/attachment/1109/



    Gruß Markus

  • Das

    sheet2.getRange(zeile,spalte).setValue( sums );

    muss aus der while-Schleife raus. Die Schleife ist dazu da, alles zu zählen.

    Unter der while-Schleife dann (für das Beispiel aus der Grafik):

    for (var spalte=2; spalte < 34; spalte++)

    {

    // hier ggfs. noch Prüfung auf 0, falls die nicht ausgegeben werden soll

    // if ( sums[spalte] > 0 ) ...

    sheet2.getRange(zeile,spalte).setValue( sums[spalte] );

    }

  • Okay, ich denke das Problem liegt daran, dass außerhalb vom while nichts mehr ausgeführt wird. Woran kann das liegen?


  • Du erhöhst die Zeile innerhalb der IF-Bedingung.


    while(zeile < 100)

    {

    spalte=3;

    num=0;

    if(sheet2.getRange(zeile,1).getValue() != "")

    {

    while(spalte < 35)

    { if(sheet2.getRange(zeile, spalte).getValue() == "X" && sheet2.getRange(3, spalte).getValue() != "")

    {

    num++;

    sums[spalte]++;

    }

    spalte++;

    }

    sheet2.getRange(zeile,34).setValue( num );

    }

    zeile++; // das muss hier stehen

    }

  • Super vielen Dank! Jetzt klappt es, allerdings gibt es noch ein Problem:

    Die Summen werden nicht in der letzten Zeile eingetragen, sondern in Zeile 100. Das liegt daran, dass im while(zeile<100) steht. Kann ich vorab prüfen, wie viel Zeilen nicht leer sind?


    Gruß Markus

  • Zitat

    Kann ich vorab prüfen, wie viel Zeilen nicht leer sind?

    Da gibt es sicher mehrere Möglichkeiten, sowohl zum Zählen als auch, ob / welche Zeilen gefüllt sind.


    Für deine Beispielgrafik würde mich aber die tatsächliche Anzahl garnicht interessieren, sondern bei leerer Zeile aus der Schleife ausssteigen. Also diese Abfrage

    if(sheet2.getRange(zeile,1).getValue() != "") {

    am Ende erweitern um

    else

    {

    break;

    }


    zeile steht dann auf dem Wert der gelesenen Zeilen, falls Du den Wert danach noch brauchst.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!