IF Bedingungen / ELSE IF / ELSE (Google Tabellen Script)
In diesem Tutorial und zugleich Snippet zeige ich Euch wie Ihr IF Bedingungen in der Google Tabellen Scriptprogrammierung erstellen könnt.
Solche IF und ELSE IF Blöcke könnt Ihr hintereinander aber auch verschachtelt anwenden. Damit wird dann ein Bereich Eures Scriptes so gesteuert dass nur Befehle ausgeführt werden die bestimmten Bedingungen entsprechen.
Wer jetzt das erste mal ein Google Tabellen Script programmiert sollte sich zuerst dieses Tutorial hier anschauen:
Mein erstes Google Tabellen Script programmieren
Wenn Ihr Euch auch für Schleifen oder sogenannte Loops interessiert dann schaut mal hier:
Übersicht der SCHLEIFEN (Google Tabellen Script) Snippet
Beschreibung:
In diesem Beispiel zeige ich Euch wie Ihr die IF Abfage so aufbauen könnt, dass Ihr in Zelle "A1" eine Zahl oder Text eingeben könnt und als Ausgabe in Zelle C1 angezeigt wird welcher IF oder ELSE Block gerade ausgeführt wird.
Wir fangen erst einmal mit einer ganz einfachen Variante an.
Zugriff auf das aktive Tabellenblatt
In den Beispielen greifen wir zuerst auf das aktive Tabellenblatt zu und weisen es der Variablen ss zu:
var ss= SpreadsheetApp.getActiveSpreadsheet();
Anschließend werden ein paar Variablen deklariert.
var abfrageZelle="A1"; // Zelle die geprüft wird var ausgabeZelle="C1"; // Zelle die das Ergebnis zeigt var WertVonAbfrageZelle = ss.getRange(abfrageZelle).getValue();
Hier könnt Ihr für abfrageZelle und ausgabeZelle die Einträge ändern wenn Ihr wollt.
abfrageZelle: Hier könnt Ihr Eure Eingaben machen. In den Beispielen benutze ich die Zelle "A1" die ausgelesen wird.
ausgabeZelle: Hier könnt Ihr entscheiden wo die Ausgabe stattfinden soll. Ich benutze hier "C1" um das Ergebnis auszugeben.
Mit ss.getRange(abfrageZelle).getValue() geben wir den Bereich an wo wir den Wert dann auslesen möchten. getRange ist für den Bereich zuständig und getValue liest den Wert ein.
Einfache IF Bedingungen:
Der Aufbau einer einfachen IF Abfrage ist sehr einfach und sieht in etwa so aus.
function ifAbfrage1(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var abfrageZelle="A1"; // Zelle die geprüft wird var ausgabeZelle="C1"; // Zelle die das Ergebnis zeigt var WertVonAbfrageZelle = ss.getRange(abfrageZelle).getValue(); if(WertVonAbfrageZelle==1){ // IF Block 1 ss.getRange(ausgabeZelle).setValue("IF Block 1 wird ausgeführt"); } }
Im unteren Bereich seht Ihr schon wie das ganze funktioniert. Hier steht nur ein if und in Klammern die Bedingung.
if(WertVonAbfrageZelle==1)
Wir haben ja vorher die Zelle A1 mit getValue() ausgelesen und der Variablen WertVonAbfrageZelle zugewiesen. Sollte jetzt in Zelle A1 eine 1 drin stehen dann wird der IF Block ausgeführt. Also alles was innerhalb der geschweiften Klammern steht gehört zu diesem Bereich. Sollte keine 1 in der Zelle A1 stehen wird der gesamte Block übersprungen.
Mit …
ss.getRange(ausgabeZelle).setValue("IF Block 1 wird ausgeführt")
… schreiben wir dann über setValue den gewünschten Text "IF Block 1 wird ausgeführt" in die Zelle C1. Wir hatten ja auch hier schon die Zelle C1 der Variablen ausgabeZelle zugewiesen.
Warum == und nicht =
Ein Vergleich in Eurer Bedingung wird mit zwei Gleichheitszeichen durchgeführt. Wenn Ihr nur ein Gleichheitszeichen benutzen würdet wäre es wie am Anfang des Scriptes nichts weiter als eine Zuweisung. Ihr seht das sehr gut bei
var abfrageZelle="A1";
Hier habt Ihr ja auch der Variablen abfrageZelle den Wert A1 zugewisen. Deshalb braucht man für einen Vergleich natürlich etwas anderes. Genau deshalb benutzt mal zwei Gleichheitszeichen ==.
IF Bedingungen mit ELSE Block
Jetzt gehen wir mal einen kleinen Schritt weiter und werden noch einen ELSE Block hinzufügen. Dieser ELSE Block wird immer dann ausgeführt wenn die Bedingung der IF Abfrage nicht übereinstimmt. Das heißt, entweder wird der IF Block ausgeführt oder der ELSE Block aber nie beide. Welcher von beiden ausgeführt wird ist nur abhängig davon ob die Bedingung erfüllt wurde oder nicht.
function ifAbfrage2(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var abfrageZelle="A1"; // Zelle die geprüft wird var ausgabeZelle="C1"; // Zelle die das Ergebnis zeigt var WertVonAbfrageZelle = ss.getRange(abfrageZelle).getValue(); if(WertVonAbfrageZelle==1){ // IF Block 1 ss.getRange(ausgabeZelle).setValue("IF Block 1 wird ausgeführt"); } else{ // ELSE Block ss.getRange(ausgabeZelle).setValue("IF Block 1 wird nicht ausgeführt sondern der ELSE Block"); } }
Wie Ihr seht habe ich hier nur die folgenden Zeilen der IF Abfrage direkt angehangen.
else{ ss.getRange(ausgabeZelle).setValue("IF Block 1 wird nicht ausgeführt sondern der ELSE Block"); }
Wenn Ihr jetzt also eine 1 eingebt erhaltet Ihr wieder "IF Block 1 wird ausgeführt" und sobald Ihr etwas anderes in die Zelle schreibt erhaltet Ihr "IF Block 1 wird nicht ausgeführt sondern der ELSE Block".
Damit man aber nicht nur diese beiden Varianten hat kann man das ganze natürlich noch wesentlich umfangreicher aufbauen.
IF Bedingungen mit ELSE IF und ELSE Block
Ihr habt mit ELSE IF noch die Möglichkeit mehrere Abfragen zu generieren. Hierbei ist es so dass wieder nur ein einziger Block davon ausgeführt wird. Ich gebe Euch mal ein Beispiel und beschreibe anschließend wie das ganze funktioniert.
function ifAbfrage3(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var abfrageZelle="A1"; // Zelle die geprüft wird var ausgabeZelle="C1"; // Zelle die das Ergebnis zeigt var WertVonAbfrageZelle = ss.getRange(abfrageZelle).getValue(); if(WertVonAbfrageZelle==1){ // IF Block 1 ss.getRange(ausgabeZelle).setValue("Wert: 1 // IF Block 1 wird ausgeführt."); } else if(WertVonAbfrageZelle==2){ // ELSE IF 1 ss.getRange(ausgabeZelle).setValue("Wert: 2 // ELSE IF Block 1 wird ausgeführt"); } else if(WertVonAbfrageZelle==3){ // ELSE IF 2 ss.getRange(ausgabeZelle).setValue("Wert: 3 // ELSE IF Block 2 wird ausgeführt"); } else{ // ELSE Block ss.getRange(ausgabeZelle).setValue("ELSE Block wird ausgeführt"); } }
Bei dieser Variante ist es so, dass der erste IF Block ausgeführt wird sobald in Zelle A1 der Wert 1 steht. Sollte eine 2 in der Zelle stehen wird der erste ELSE IF Block ausgeführt. Bei 3 der zweite ELSE IF Block und wenn nicht davon zutrifft wird der ELSE Block ausgeführt.
Prioritäten bei der IF Abrage
Wenn Ihr die IF Abfrage genau so aufbaut ist es wichtig die Prioritäten einzuhalten. Hier wird der gesamte IF / ELSE IF und ELSE Block verlassen sobald die erste Bedingung erfüllt ist. Vor allem wenn Ihr nicht nur Gleichheitszeichen verwenden solltet sondern zum Beispiel "größer als" (>=) und "kleiner als" ("<=") könnten eventuell mehrere Bedingungen zutreffen. Hier müsst Ihr dann genau überlegen welche am Wichtigsten sind. Die wichtigsten Bedingungen müssen dann natürlich weiter oben stehen.
Ihr könnt natürlich auch Eure IF Abfragen getrennt oder verschachtelt anwenden.
Verschachtelte IF Bedingung
Im nachfolgenden Beispiel ist die IF Bedingung etwas verschachtelt. Aber ich denke Ihr könnt das jetzt schon selbst sehr gut nachvollziehen.
function ifAbfrage4(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var abfrageZelle="A1"; // Zelle die geprüft wird var ausgabeZelle="C1"; // Zelle die das Ergebnis zeigt var WertVonAbfrageZelle = ss.getRange(abfrageZelle).getValue(); if(WertVonAbfrageZelle>=10){ // IF Block 1 // INNERHALB DES ERSTEN BLOCKS - ANFANG if(WertVonAbfrageZelle<=100){ ss.getRange(ausgabeZelle).setValue("Wert zwischen 10 und : 100"); } else if(WertVonAbfrageZelle<=1000){ ss.getRange(ausgabeZelle).setValue("Wert zwischen 100 und 1000"); } else if(WertVonAbfrageZelle<=10000){ ss.getRange(ausgabeZelle).setValue("Wert zwischen 1000 und 10000"); } else{ ss.getRange(ausgabeZelle).setValue("Wert über 10000"); } // INNERHALB DES ERSTEN BLOCKS - ENDE } else{ // ELSE Block ss.getRange(ausgabeZelle).setValue(" WERT unter 10 // ELSE Block wird ausgeführt"); } }
Hier wird zuerst geprüft ob die Zahl größer oder gleich 10 ist. Sollte die Zahl größer oder gleich 10 sein wird der erste IF Block ausgeführt. Innerhalb dieses IF Blocks gibt es weitere IF und ELSE IF Bedingungen die geprüft werden. Sollte also die Zahl schon kleiner als 10 sein wird der gesamte Bereich vorher schon übersprungen und nur der letzte ELSE Block ausgeführt.
Innerhalb des ersten IF Blocks habe ich jetzt extra Bedingungen gewählt damit Ihr seht dass die Prioritäten wichtig sind. Würdet Ihr hier die Reihenfolge ändern kann es zu unerwünschten Ergebnissen führen.
Hätte ich beispielsweise innerhalb des ersten IF Blocks "WertVonAbfrageZelle<=10000" an oberste Stelle gesetzt würden die anderen IF Abfragen nie zum Zuge kommen.
Wenn Ihr viele Bedingungen prüfen müsst, dann schaue Euch auch mal die Möglichkeit von SWITCH CASE an:
Switch Case (Google Tabellen Script) Snippet
Text statt Zahlen als Bedingung
Möchtet Ihr als Bedingung statt Zahlen einfach mal Text benutzen müsst Ihr das nur in Anführungszeichen setzen. Das sieht dann in etwa so aus
function ifAbfrage5(){ var ss = SpreadsheetApp.getActiveSpreadsheet(); var abfrageZelle="A1"; // Zelle die geprüft wird var ausgabeZelle="C1"; // Zelle die das Ergebnis zeigt var WertVonAbfrageZelle = ss.getRange(abfrageZelle).getValue(); if(WertVonAbfrageZelle=="Eins"){ // IF Block 1 ss.getRange(ausgabeZelle).setValue("Ergebnis: Eins // IF Block wird ausgeführt"); } }
Hier muss in Zelle "A1" das Wort Eins stehen damit der IF Block 1 ausgeführt wird. Also total easy.
So, dass soll es erst einmal gewesen sein. Ich denke das war bestimmt genug Stoff für so eine einfache IF Bedingung 😉
Hier noch ein Video welches Euch zeigt wie man ein einfaches Script programmieren kann und wie Ihr den Scripteditor aufrufen könnt:
Mein erstes Script programmieren mit GOOGLE Tabellen
Achtung:
Benutzt zum Üben eine separate Tabelle für Testzwecke oder eine Kopie des Originals damit Euch keine Daten verloren gehen.
Die Benutzung der Scripte erfolgt natürlich wie immer auf eigene Gefahr.
Euch gefällt das Script und Ihr wollt Euch gerne bedanken?
Hier ist meine AMAZON – Wunschliste [HIER KLICKEN] 😉
Dies ist Teil der Serie: "Google Tabellen Script Programmierung"
Dieses Tutorial ist Teil einer Serie die als eine Art Datenbank für kleinere Snippets dient. Damit habt Ihr die Möglichkeit für Eure Projekte einen Teil des Codes hier direkt zu kopieren und wie in Modulbauweise das ganze anzuwenden.
Die Liste aller Snippets findet Ihr hier:
Google Tabellen Script Programmierung
Das könnte Dich auch interessieren
- Alle Termine vom Google Kalender in Tabelle anzeigen
- Beispiel einer doppelten FOR Schleife (Google Tabellen Script)
- DO WHILE SCHLEIFE (Google Tabellen Script) Snippet
- FOR EACH SCHLEIFE (Google Tabellen Script) Snippet
- FOR SCHLEIFE (Google Tabellen Script) Snippet
- Google Tabellen Script autorisieren
- Switch Case (Google Tabellen Script) Snippet
- Textinhalt vergleichen & markieren (Google Tabellen / Spreadsheets) Script
- WHILE SCHLEIFE (Google Tabellen Script) Snippet
- Wertebereich einer Zelle mit Google Tabellen Script überprüfen
- Zellen vergleichen & markieren / Array (Google Tabellen / Spreadsheets) Script
- Übersicht der SCHLEIFEN (Google Tabellen Script) Snippet
11 Comments
Hallo zusammen.
Ich suche Hilfe zu einer Funktion. Ich hätte gerne einen Deadline-Counter, der ein in einer Zelle (beispielsweise C3) eingetragenes Datum ausliest, die Anzahl an Tagen die bis heute übrig sind oder überschritten sind in einer weiteren Zelle (beispielsweise D4) ausgibt. Wenn die Checkbox mit "erledigt" markiert ist, hätte ich gern, dass die Deadline-Zelle mit "-" gefüllt wird. Sollte in der Datumszelle kein gültiges Datum eingetragen sein, hätte ich gern, dass das Script die Zeile überspringt. Ich hätte gern, sofern möglich, eine Hilfe zur Lösung, damit ich die Scriptschritte verstehen kann.
Danke im Voraus
Heiko
Ich hab leider vergessen, dazuzuschreiben, dass die Funktion für alle verfügbaren Zeilen ausgeführt werden soll. also quasi ab Zeile drei bis zur letzten (ähnlich dem A:A Befehl im Sheet)
Wenn Du die Formel benutzt dann musst Du das nur runter kopieren.
Hallo Heiko,
wenn ich das jetzt richtig gelesen habe benötigst Du dafür aber keine Script-Programmierung. Du kannst das zwar machen aber so wie es sich anhört kannst Du auch die WENN-Funktion dafür benutzen.
Zumindest könntest Du einen großen Teil über die normalen Formeln erledigen und bei spezielleren Fällen immer noch die Google Script Programmierung benutzen. Damit es in jeder Zelle der Spalte funktioniert musst Du die Formel später nur runter kopieren.
Einfache Wenn – Funktion:
https://toptorials.com/wenn-dann-sonst-funktion-google-tabellen-spreadsheets/
Verschachtelte Wenn – Funktion:
https://toptorials.com/verschachtelte-wenn-funktion-google-tabellen/
Anzahl der Tage bis heute:
https://toptorials.com/anzahl-vergangener-tage-bis-heute-google-tabellen/
Heutigen Tag im Kalender markieren (wegen der Formel):
https://toptorials.com/heutigen-tag-im-kalender-markieren-google-tabellen/
Auswahlliste erstellen (zum Erstellen einer Auswahlliste (ähnlich Checkbox)):
https://toptorials.com/auswahlliste-aus-zellbereich-google-tabellen/
Auswahlliste mit SVerweis:
https://toptorials.com/wp-admin/post.php?post=2408&action=edit
Viele Grüße
Chris
Hallo Chris,
vielen Dank für deine Antwort. Dass ich mein Anliegen auch mit:
=if(and(F3="";G3="");"";if(G3=true;"DONE";if(F3="";"-";F3-today())))
erreiche, weiß ich inzwischen (ich stand vor dem wald und sah die bäume nicht 😉 ), aber ich möchte gern wissen, wie das in einem Skript aussieht. Im Beispiel befindet sich in Spalte F das Deadline-Datum und in Spalte G eine Checkbox, ob die Aufgabe erledigt ist. Vielleicht ist das eine schöne Möglichkeit für ein erweitertes Tutorial… 😉
Vielen Dank für deine Hilfe.
LG Heiko
Momentan sieht es bei mir sehr schwierig aus zu helfen oder neue Tutorials zu machen. Ich habe noch weitere Kanäle und im Moment ein Aufkommen von ca 260 Kommentaren "pro Woche" nur bei YouTube (gerade mal schnell nachgeschaut). Hinzu kommen die Fragen hier auf der Webseite. Das wird sich, so wie ich dass jetzt schon sehe noch wesentlich erhöhen. Wenn ich kein Fulltimejob hätte, dann hätte ich natürlich auch mehr Zeit. Aber so sieht es sehr schlecht im Moment aus. Ich hoffe Du verstehst mein Dilemma 😉
Natürlich. Danke für die Hilfe nochmal. Viele Grüße
Gern geschehen und DANKE für Dein Verständnis 😉
Hallo Leute,
könnt ihr mir vielleicht bitte erklären warum bei folgendem Skript die Fehlermeldung kommt dass eine Klammer fehlt ?
if (activeSheet.getName() !== "Data Tracking list" && r.getColumn() !== 22 && r.rowStart !>= 3 && r.rowEnd !<= 5000 && r.getValue() !== 0) {
return;
}
Leider hast Du hier nur einen Auszug von Deinem Script eingetragen also kann ich nur raten. Ich glaube Du könntest die geschweifte schließende Klammer nach dem Return vergessen haben. Nach der IF Anweisung hast Du eine öffnende geschweifte Klammer und nach der Return Anweisung auch eine schließende Klammer. Du brauchst aber am Ende der Funktion ebenfalls noch eine schließende Klammer. Wie gesagt, das ist ja nur ein Auszug deshalb kann man nicht viel sagen.
Viele Grüße
Chris
Hallo Zusammen,
da ich leider absoluter Script-Laie bin, hoffe ich, dass einer von Euch erfahrenen Nutzern mir ggf. bei einer Problematik weiterhelfen kann.
Sachverhalt:
Ich habe über die Datenvalidierung mehrere Drop Down Elementlisten mit jeweils 4 Einträgen (Ja, Nein, N/A, ???) in mehreren Spalte erstellt und möchte nun über eine Funktion (If, else if und else) über ein Macro bzw. ggf. einen (Zeit-)Trigger die getätigen Drop Down Eintragungen für ALLE Elementlisten im Tabellenblatt unter einer ganz bestimmten Bedingung (Nein wird zu Ja) wieder zurücksetzen. Alle anderen Auswahlmöglichkeiten des Drop Down Menus sollen bestehen bleiben und leere Zellen im Spaltenbereich unberührt von Veränderungen bleiben.
Aktuelles Problem:
Mir ist es bisher nicht gelungen, über die var abfrageZelle MEHRERE Zellen bzw. Bereiche gleichzeitg anzusteuern und je nach Drop Down Eintragung eine entsprechende Ausgabe zu erhalten. Ich bekomme immer nur die erste Zelle (in dem Fall F1) als Ausgabewert. Die IF Else Funktion funktioniert aber soweit tadellos und macht bei entsprechender Änderung der Drop Down Eintragung auch genau was Sie soll – nur leider eben nicht für ALLE folgenden Elementlistenbereiche in der Spalte.
Wahrscheinlich ist das Ganze weniger kompliziert als gedacht aber ich schaffe es aktuell trotz ettlicher Videos zu dem Thema und weiteren Recherchen einfach nicht eine adäquate Lösung zu finden und Chris oder andere können mir weiterhelfen. Vielen Dank im Vorraus!
Liebe Grüße
Elias
Hier noch das aktuelle Script:
function DropDownReset() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var abfrageZelle = "F1:F6"
var ausgabeZelle = "F1:F6"
var WertVonAbfrageZelle = ss.getRange(abfrageZelle).getValue();
if(WertVonAbfrageZelle=="Nein"){
ss.getRange(ausgabeZelle).setValue("Ja");
}
else if(WertVonAbfrageZelle=="N/A"){
ss.getRange(ausgabeZelle).setValue("N/A");
}
else if(WertVonAbfrageZelle=="Ja"){
ss.getRange(ausgabeZelle).setValue("Ja");
}
else if(WertVonAbfrageZelle=="???"){
ss.getRange(ausgabeZelle).setValue("???");
}
else
ss.getRange(ausgabeZelle).setValue("");
}