IF-Funktion, die nichts tut bei false
Hallo! Ich habe eine recht lange IF-Funktion, die auch soweit funktioniert. Ich arbeite mit google sheets.
Sie soll mir etwas ausgeben (z.B. in A3), wenn ich einen gewissen Text in z.B. A8 eingebe. Anderenfalls soll sie aber am Wert der Zelle nichts ändern, wenn ich etwas anderes eingebe. Es geht aber nur um 2 Zustände, 1 und 0. Wenn ich Text1 eingebe erscheint also eine 1, bei Text2 eine 0 und wenn ich z.B. Text 3 oder 4 eingebe, soll der Wert, der schon in A3 steht, nicht verändert werden.
Versuche ich das als Formel (also zb. IF (A8=text3;A8+0;A8+0) , wird immer ein Zirkelbezug festgestellt, logischerweise.
Gibt es eine Möglichkeit, dass nichts ausgegeben wird, wenn ich was eingebe?
Wie gesagt, für Text 1 und 2 funktionierts, aber Text3 funktioniert dann nicht mehr. Text3 setzt das ganze dann halt immer auf 0 oder 1, je nach dem, wie die Funktion lautet. Und das soll nicht sein.
Kann mir dabei jmd. helfen?
Sie soll mir etwas ausgeben (z.B. in A3), wenn ich einen gewissen Text in z.B. A8 eingebe. Anderenfalls soll sie aber am Wert der Zelle nichts ändern, wenn ich etwas anderes eingebe. Es geht aber nur um 2 Zustände, 1 und 0. Wenn ich Text1 eingebe erscheint also eine 1, bei Text2 eine 0 und wenn ich z.B. Text 3 oder 4 eingebe, soll der Wert, der schon in A3 steht, nicht verändert werden.
Versuche ich das als Formel (also zb. IF (A8=text3;A8+0;A8+0) , wird immer ein Zirkelbezug festgestellt, logischerweise.
Gibt es eine Möglichkeit, dass nichts ausgegeben wird, wenn ich was eingebe?
Wie gesagt, für Text 1 und 2 funktionierts, aber Text3 funktioniert dann nicht mehr. Text3 setzt das ganze dann halt immer auf 0 oder 1, je nach dem, wie die Funktion lautet. Und das soll nicht sein.
Kann mir dabei jmd. helfen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 315206
Url: https://administrator.de/forum/if-funktion-die-nichts-tut-bei-false-315206.html
Ausgedruckt am: 23.12.2024 um 04:12 Uhr
12 Kommentare
Neuester Kommentar
Hallo Stoffn,
du kannst eine Zelle nicht mit einer Formel und einem vom Benutzer eingetragenen Wert belegen, beides geht nicht. Ebenso kannst du mit einer Formel keinen Wert einer anderen Zelle ändern. Hier bleibt dir also bei Google-Sheets ein JavaScript das das für dich erledigt:
Dazu öffnest du unter Tools > Scripteditor den selbigen und erstellst einen Trigger (Ressourcen > Aktuelle Trigger des Projekts und erstellst dort folgenden Trigger:
Dann fügst du den unten stehenden Code in das Codefenster ein:
Wenn du jetzt den Inhalt von A8 z.B. auf "text1" oder "text2" änderst wird A3 verändert, ansonsten behält A3 seinen aktuellen Wert.
https://docs.google.com/spreadsheets/d/1JgvhFx97Oa3jpqEYsUcnAazC2x85iG1p ...
Grüße Uwe
du kannst eine Zelle nicht mit einer Formel und einem vom Benutzer eingetragenen Wert belegen, beides geht nicht. Ebenso kannst du mit einer Formel keinen Wert einer anderen Zelle ändern. Hier bleibt dir also bei Google-Sheets ein JavaScript das das für dich erledigt:
Dazu öffnest du unter Tools > Scripteditor den selbigen und erstellst einen Trigger (Ressourcen > Aktuelle Trigger des Projekts und erstellst dort folgenden Trigger:
Dann fügst du den unten stehenden Code in das Codefenster ein:
function myFunction(e){
var sheet = SpreadsheetApp.getActiveSheet();
var rngOut = sheet.getRange("A3");
if (e.range.getRow() == 8 && e.range.getColumn() == 1){
switch(e.range.getValue()){
case 'text1':
rngOut.setValue(1);
break;
case 'text2':
rngOut.setValue(0);
break;
}
}
}
https://docs.google.com/spreadsheets/d/1JgvhFx97Oa3jpqEYsUcnAazC2x85iG1p ...
Grüße Uwe
Zitat von @Stoffn:
Und wenn ich das gleich z.B. für Spalte B und C noch möchte? Also auch mit den Ergebnissen jeweils nur in diesen Spalten.
Sorry hatte deine Ergänzung leider nicht mehr mitbekommen. Sheet von oben ist aktualisiert.Und wenn ich das gleich z.B. für Spalte B und C noch möchte? Also auch mit den Ergebnissen jeweils nur in diesen Spalten.
Hier noch der Code für Spalte A-C. Die Ausgabezeile der jeweiligen Spalte legst du mit der Variablen intRowOut fest. Willst du das ganze auf noch mehr Spalten erweitern passe einfach die IF-Bedingung
if (currentCol >= 1 && currentCol <= 3)
an deine Bedürfnisse an.
Achtung, die erste Funktion wurde auch aktualisiert.
function lastValue(column) {
var lastRow = SpreadsheetApp.getActiveSheet().getMaxRows();
var values = SpreadsheetApp.getActiveSheet().getRange(1,column,lastRow,1).getValues();
for (; values[lastRow - 1] == "" && lastRow > 0; lastRow--) {}
return values[lastRow - 1];
}
function myFunction(e){
// aktuelles Sheet festlegen
var sheet = SpreadsheetApp.getActiveSheet();
// Zeile der jeweiligen Spalte die verändert wird
var intRowOut = 3;
var currentCol = e.range.getColumn();
// nur bei Änderungen in Spalten A-C reagieren
if (currentCol >= 1 && currentCol <= 3){
switch(lastValue(currentCol)){
case 'text1':
sheet.getRange(intRowOut,currentCol).setValue(1);
break;
case 'text2':
sheet.getRange(intRowOut,currentCol).setValue(0);
break;
}
}
}
Reicht es, für die Funktion selbst im Script einen Zeittrigger zu erstellen?
Du kannst im Script-Editor einen Zeittrigger deiner Wahl anlegen (Ressourcen > Trigger des aktuellen Projekts)Du musst dann in der Funktion nur die variablen Bezüge wie SpreadsheetApp.getActiveSheet() durch feste ersetzen, also den Sheetnamen fest angeben (z.B. SpreadsheetApp.getSheetByName("Blattname")), da es ja zu einem variablen Zeitzeitpunkt kein aktives Sheet geben kann. Ebenso die Event-Variable e hat dort anderen Inhalt und enthält keinen Zellbezug mehr, die musst du natürlich auch durch feste Zellen tauschen bzw. in deinem Fall dein Bereich mit einer For-Schleife durchlaufen und alle Zellen prüfen.
Wenn es auf Konsistenz ankommt würde ich aber bestimmt nicht auf Google-Sheets zurückgreifen!! Du solltest dringend über eine Datenbank-Anwendung auf Browserbasis nachdenken. Google-Sheets ist für sowas einfach sehr schlecht geeignet. Aber ich schätze hier fehlt einfach mal wieder das Wissen.