50 Stimmen

Fallfunktion Äquivalent in Excel

Ich habe eine interessante Aufgabe: Ich muss die folgenden Daten in Excel überprüfen:

|   A  -   B  -   C  -  D   |
|------|------|------|------|
|  36  |   0  |   0  |   x  |
|   0  |  600 |  700 |   x  |
|___________________________|

Bitte entschuldigen Sie meine wunderbare schlechte ASCII-Kunst. Ich brauche also die Spalte D (x), um eine Überprüfung mit den angrenzenden Zellen durchzuführen und die Werte dann gegebenenfalls umzuwandeln. Hier sind die Kriterien:

Wenn Spalte B größer als 0 ist, funktioniert alles prima und ich kann Kaffee holen. Wenn das nicht der Fall ist, muss ich A1 anhand einer Tabelle umwandeln - zum Beispiel, 32 = 1420 und in die D . Leider gibt es keine Beziehung zwischen A und dem, in was es umgewandelt werden muss, so dass eine Berechnung nicht in Frage kommt.

Eine Case- oder Switch-Anweisung wäre für dieses Szenario ideal, aber ich glaube nicht, dass es sich dabei um eine native Funktion in Excel handelt. Ich denke auch, dass es ziemlich verrückt wäre, einen Haufen von =IF() Das habe ich etwa viermal gemacht, bevor ich mich entschied, dass es keine gute Idee war (die Geschichte meines Lebens).

58voto

Blorgbeard Punkte 96796

Klingt wie ein Job für VLOOKUP !

Sie können Ihre Zuordnungen vom Typ 32 -> 1420 irgendwo in ein paar Spalten eintragen und dann die Funktion VLOOKUP verwenden, um die Suche auszuführen.

21voto

tobriand Punkte 1015

Ohne auf das ursprüngliche Problem einzugehen (das vermutlich längst gelöst ist), habe ich vor kurzem einen netten Trick entdeckt, mit dem die Choose-Funktion genau wie eine select case Anweisung, ohne dass die Daten geändert werden müssen. Die Sache hat nur einen Haken: Es kann immer nur eine der Auswahlbedingungen wahr sein.

Die Syntax lautet wie folgt:

CHOOSE( 
    (1 * (CONDITION_1)) + (2 * (CONDITION_2)) + ... + (N * (CONDITION_N)),
    RESULT_1, RESULT_2, ... , RESULT_N
)

Unter der Annahme, dass nur eine der Bedingungen 1 bis N zutrifft, ist alles andere 0, d. h. der numerische Wert entspricht dem entsprechenden Ergebnis.

Wenn Sie sich nicht zu 100 % sicher sind, dass sich alle Bedingungen gegenseitig ausschließen, sollten Sie etwas wie

CHOOSE(
    (1 * TEST1) + (2 * TEST2) + (4 * TEST3) + (8 * TEST4) ... (2^N * TESTN)
    OUT1, OUT2, , OUT3, , , , OUT4 , , <LOTS OF COMMAS> , OUT5
)

Wenn Excel jedoch eine Obergrenze für die Anzahl der Argumente hat, die eine Funktion annehmen kann, würden Sie ziemlich schnell an diese Grenze stoßen.

Ehrlich gesagt, ich kann nicht glauben, dass ich Jahre gebraucht habe, um es herauszufinden, aber ich habe es vorher nicht gesehen, also dachte ich, ich lasse es hier, um anderen zu helfen.

EDIT: Per Kommentar von @aTrusty: Durch die Verwendung einer Formel der folgenden Form lassen sich dumme Kommas eliminieren (und damit würde die choose-Anweisung für bis zu 254 Fälle funktionieren):

CHOOSE(
    1 + LOG(1 + (2*TEST1) + (4*TEST2) + (8*TEST3) + (16*TEST4),2), 
    OTHERWISE, RESULT1, RESULT2, RESULT3, RESULT4
)

Beachten Sie das zweite Argument der LOG Klausel, die den Wert zur Basis 2 setzt und die ganze Sache zum Laufen bringt.

Bearbeiten: Per Davids Antwort Wenn Sie das Glück haben, mit Office 2016 zu arbeiten, gibt es jetzt eine echte Switch-Anweisung. Abgesehen von den Schwierigkeiten beim Lesen, bedeutet dies auch, dass Sie die Effizienz von switch erhalten, nicht nur das Verhalten!

16voto

david Punkte 2161

Die Funktion Umschalten ist jetzt in Excel 2016 / Office 365 verfügbar

SWITCH(Ausdruck, Wert1, Ergebnis1, [Standard oder Wert2, Ergebnis2], [Standard oder Wert3, Ergebnis3])

example:
=SWITCH(A1,0,"FALSE",-1,"TRUE","Maybe")

Microsoft -Office Unterstützung

Hinweis: MS hat diese Seite aktualisiert, um nur das Verhalten von Excel 2019 zu dokumentieren. Letztendlich werden sie wahrscheinlich auch die Verweise auf 2019 entfernen... Um zu sehen, wie die Seite im Jahr 2016 aussah, verwenden Sie die Wayback-Maschine: https://web.archive.org/web/20161010180642/https://support.office.com/en-us/article/SWITCH-function-47ab33c0-28ce-4530-8a45-d532ec4aa25e

8voto

BKimmel Punkte 613

Versuchen Sie dies;

=IF(B1>=0, B1, OFFSET($X$1, MATCH(B1, $X:$X, Z) - 1, Y)

WHERE
X = Die Spalten, in denen Sie indizieren wollen
Y = Die Anzahl der Spalten links (-Y) oder rechts (Y) der indizierten Spalte, um den gesuchten Wert zu erhalten
Z = 0 bei exakter Übereinstimmung (wenn Sie Fehler behandeln wollen)

2voto

Robert Punkte 21

Ich habe diese Lösung verwendet, um Farbcodes mit einzelnen Buchstaben in ihre Beschreibungen umzuwandeln:

=CHOOSE(FIND(H5,"GYR"),"Good","OK","Bad")

Im Grunde suchen Sie das Element, das Sie dekodieren wollen, im Array und verwenden dann CHOOSE() um den zugehörigen Artikel auszuwählen. Das ist etwas kompakter als die Erstellung einer Tabelle für VLOOKUP() .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X