Frage Case-Funktion entspricht in Excel


Ich habe eine interessante Herausforderung - ich muss die folgenden Daten in Excel überprüfen:

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

Du wirst meine wunderbar schlechte ASCII-Kunst entschuldigen müssen. Also brauche ich die D-Spalte (x), um eine Überprüfung gegen die benachbarten Zellen auszuführen, und wandle dann die Werte bei Bedarf um. Hier sind die Kriterien:

Wenn Spalte B größer als 0 ist, funktioniert alles super und ich kann Kaffee bekommen. Wenn es diese Anforderung nicht erfüllt, muss ich A1 nach einer Tabelle konvertieren - zum Beispiel 32 = 1420 und hineinlegen D. Leider gibt es keine Beziehung zwischen A und dem, zu dem es konvertiert werden muss, so dass eine Berechnung nicht in Frage kommt.

Eine case- oder switch-Anweisung wäre in diesem Szenario perfekt, aber ich glaube nicht, dass es eine native Funktion in Excel ist. Ich denke auch, dass es irgendwie verrückt wäre, einen Haufen zu verketten =IF() Aussagen zusammen, die ich ungefähr viermal machte, bevor ich entschied, dass es eine schlechte Idee war (Geschichte meines Lebens).


47
2018-03-30 15:45


Ursprung


Antworten:


Klingt wie ein Job für SVERWEIS!

Sie können Ihre 32 -> 1420-Typ-Mappings irgendwo in ein paar Spalten einfügen und dann die Funktion SVERWEIS verwenden, um die Suche durchzuführen.


55
2018-03-30 20:31



Ohne Bezug auf das ursprüngliche Problem (von dem ich vermute, dass es längst gelöst ist), habe ich vor Kurzem einen ordentlichen Trick entdeckt, der die Choose-Funktion genau wie a funktionieren lässt select case Anweisung, ohne dass Daten geändert werden müssen. Es gibt nur einen Haken: Nur eine Ihrer gewählten Bedingungen kann zu einem bestimmten Zeitpunkt 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 wahr ist, ist alles andere 0, was bedeutet, dass der numerische Wert dem entsprechenden Ergebnis entspricht.

Wenn Sie sich nicht zu 100% sicher sind, dass sich alle Bedingungen gegenseitig ausschließen, bevorzugen Sie vielleicht Folgendes:

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

Das heißt, wenn Excel eine Obergrenze für die Anzahl der Argumente einer Funktion hat, würden Sie es ziemlich schnell treffen.

Ehrlich gesagt, kann ich nicht glauben, dass es Jahre gedauert hat, es auszuarbeiten, aber ich habe es noch nie zuvor gesehen und dachte mir, ich würde es hier lassen, um anderen zu helfen.

EDIT: Pro Kommentar unten von @ aTrusty: Alberne Kommazahlen können eliminiert werden (und die choose-Anweisung würde daher für bis zu 254 Fälle funktionieren), indem eine Formel der folgenden Form verwendet wird:

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 es in Base 2 setzt und die ganze Sache funktioniert.

Bearbeiten: Pro Davids AntwortJetzt gibt es eine aktuelle switch-Anweisung, wenn Sie das Glück haben, im Büro 2016 zu arbeiten. Abgesehen von Schwierigkeiten beim Lesen, bedeutet dies auch, dass Sie die Effizienz von Switch erhalten, nicht nur das Verhalten!


20
2018-03-13 17:47



Die Switch-Funktion 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")


10
2017-08-09 11:27



Versuche dies;

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

WOHER
  X = Die Spalten, in die Sie indexieren
Y = Die Anzahl der Spalten links (-Y) oder rechts (Y) der indizierten Spalte, um den gesuchten Wert zu erhalten
Z = 0 wenn genau übereinstimmen (wenn Sie Fehler behandeln wollen)


7
2018-03-30 15:58



Ich weiß es etwas spät zu beantworten, aber ich denke, dieses kurze Video wird dir sehr helfen.

http://www.xlninja.com/2012/07/25/excel-choose-function-explained/

Im Wesentlichen wird die choose-Funktion verwendet. Er erklärt es sehr gut in dem Video, also lasse ich es tun, anstatt 20 Seiten zu tippen.

Ein anderes Video von ihm erklärt, wie man die Datenvalidierung verwendet, um ein Dropdown zu füllen, das aus einem begrenzten Bereich ausgewählt werden kann.

http://www.xlninja.com/2012/08/13/excel-data-validation-using-dependent-lists/

Sie könnten die beiden kombinieren und den Wert in der Dropdown-Liste als Index für die Choose-Funktion verwenden. Obwohl er nicht gezeigt hat, wie man sie kombinieren kann, bin ich mir sicher, dass du es herausfinden kannst, da seine Videos gut sind. Wenn Sie Probleme haben, lassen Sie es mich wissen und ich werde meine Antwort aktualisieren, um es Ihnen zu zeigen.


1
2018-06-02 00:52



Ich verstehe, dass dies eine Antwort auf eine alte Post ist.

Ich mag die If () Funktion kombiniert mit Index () / Match ():

=IF(B2>0,"x",INDEX($H$2:$I$9,MATCH(A2,$H$2:$H$9,0),2))

Die If-Funktion vergleicht, was in Spalte b ist und wenn sie größer als 0 ist, gibt sie x zurück, wenn nicht, verwendet sie das Array (Informationstabelle), das von der Index () -Funktion identifiziert und von Match () ausgewählt wurde, um den Wert zurückzugeben a entspricht.

Das Array Index hat den absoluten Standort festgelegt $H$2:$I$9 (die Dollarzeichen), so dass der Ort, auf den er zeigt, sich nicht ändert, wenn die Formel kopiert wird. Die Zeile mit dem Wert, den Sie zurückgeben möchten, wird durch die Funktion Match () identifiziert. Match () hat den zusätzlichen Vorteil, dass keine sortierte Liste benötigt wird, um Vlookup () zu durchsuchen. Match () kann den Wert mit einem Wert finden: 1 kleiner als, 0 genau, -1 größer als. Ich habe nach dem absoluten Match () -Array eine Null eingefügt $H$2:$H$9 um die genaue Übereinstimmung zu finden. Für die Spalte wird der Wert des Array Index (), das zurückgegeben werden soll, eingegeben. Ich habe eine 2 eingegeben, weil in meinem Array der Rückgabewert in der zweiten Spalte war. Unter meinem Index-Array sah so aus:

32   1420

36   1650

40   1790

44   1860

55   2010

Der Wert in der Spalte 'a', nach der in der Liste gesucht werden soll, befindet sich in der ersten Spalte in meinem Beispiel und der entsprechende Wert, der zurückgegeben werden soll, befindet sich auf der rechten Seite. Die Nachschlage- / Referenztabelle kann sich auf jeder Registerkarte im Arbeitsbuch befinden - oder auch in einer anderen Datei. -Book2 ist der Dateiname und Sheet2 ist der Name der anderen Registerkarte.

=IF(B2>0,"x",INDEX([Book2]Sheet2!$A$1:$B$8,MATCH(A2,[Book2]Sheet2!$A$1:$A$8,0),2))

Wenn Sie nicht möchten, dass x zurückkehrt, wenn der Wert von b größer als Null ist, löschen Sie das x für ein "leeres" / null-Äquivalent oder geben Sie eine 0 ein - nicht sicher, was Sie dort wollen.

Unten ist der Anfang der Funktion mit dem x gelöscht.

=IF(B2>0,"",INDEX...

1
2018-02-05 01:31



Ich habe diese Lösung verwendet, um einfarbige Farbcodes in ihre Beschreibungen zu konvertieren:

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

Sie suchen im Prinzip nach dem Element, das Sie im Array dekodieren möchten, und verwenden es dann CHOOSE() um den zugehörigen Gegenstand auszuwählen. Es ist ein wenig kompakter als einen Tisch zu bauen VLOOKUP().


1
2018-01-16 00:58



Auch wenn es alt ist, scheint dies eine beliebte Frage zu sein, also werde ich eine andere Lösung veröffentlichen, die ich für sehr elegant halte:

http://fiveminutelessons.com/learn-microsoft-excel/using-multiple-if-statements-excel

Es ist elegant, weil es nur die IF-Funktion verwendet. Grundsätzlich läuft es darauf hinaus:

ob(Bedingung, Wählen / verwenden Sie einen Wert aus der Tabelle, ob(Bedingung, Wählen / verwenden Sie einen anderen Wert aus der Tabelle...

Und so weiter

Funktioniert wunderbar, sogar besser als WVERWEIS oder VLOOOKUP

Aber ... Seien Sie gewarnt - die Anzahl der verschachtelten if-Anweisungen, die Excel verarbeiten kann, ist begrenzt.


0
2018-05-06 12:36