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.

IF Bedingungen (1: Deine Eingabe // 2: Das Ergebnis)
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
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("");
}