wake-up-neo.com

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  |
|___________________________|

Sie müssen meine wunderbar schlechte Kunst ASCII entschuldigen. Ich brauche also die D-Spalte (x), um die benachbarten Zellen zu überprüfen und die Werte dann umzuwandeln. Hier sind die Kriterien:

Wenn Spalte B größer als 0 ist, funktioniert alles gut und ich kann Kaffee bekommen. Wenn es diese Anforderung nicht erfüllt, muss ich A1 gemäß einer Tabelle konvertieren - beispielsweise 32 = 1420 und in D platzieren. Leider gibt es keine Beziehung zwischen A und dem, in was konvertiert werden muss. Daher ist das Erstellen einer Berechnung nicht möglich.

Eine Case- oder Switch-Anweisung wäre in diesem Szenario perfekt, aber ich denke nicht, dass es sich um eine native Funktion in Excel handelt. Ich denke auch, dass es ziemlich verrückt wäre, eine Reihe von =IF()-Anweisungen zusammen zu ketten, was ich ungefähr viermal gemacht habe, bevor ich zu dem Schluss kam, dass es eine schlechte Idee (Geschichte meines Lebens) war.

48
Nic

Klingt nach einem Job für VLOOKUP !

Sie können Ihre Zuordnungen von 32 -> 1420-Typen in ein paar Spalten einfügen und dann die Funktion VLOOKUP verwenden, um die Suche durchzuführen.

55
Blorgbeard

Ohne Bezug auf das ursprüngliche Problem (von dem ich vermute, dass es längst gelöst ist), habe ich kürzlich einen netten Trick entdeckt, durch den die Choose-Funktion genau wie eine select case-Anweisung funktioniert, 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 erfüllt ist, ist alles andere 0, dh der numerische Wert entspricht dem entsprechenden Ergebnis.

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

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, haben Sie es ziemlich schnell getroffen.

Ehrlich gesagt, kann ich nicht glauben, dass ich Jahre gebraucht habe, um das herauszufinden, aber ich habe es noch nie gesehen, also dachte ich mir, ich würde es hier lassen, um anderen zu helfen.

BEARBEITEN: Pro Kommentar unten von @aTrusty: Dummheiten von Kommas können eliminiert werden (und die select -Anweisung würde 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, das es in Basis 2 setzt und das Ganze zum Laufen bringt.

Edit: Per Davids Antwort , es gibt jetzt eine tatsächliche Wechselaussage, wenn Sie das Glück haben, im Büro 2016 zu arbeiten. Abgesehen von Leseschwierigkeiten bedeutet dies auch, dass Sie die Effizienz des Wechsels erhalten, nicht nur das Verhalten!

21
tobriand

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")

Microsoft-Office-Support

14
david

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 = Anzahl der Spalten links (-Y) oder rechts (Y) der indizierten Spalte, um den gewünschten Wert zu erhalten
Z = 0 wenn genau übereinstimmen (wenn Sie Fehler behandeln wollen)

8
BKimmel

Ich habe diese Lösung verwendet, um Farbcodes für einzelne Buchstaben in ihre Beschreibungen umzuwandeln:

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

Sie suchen im Grunde nach dem Element, das Sie im Array zu dekodieren versuchen, und verwenden dann CHOOSE(), um das zugehörige Element auszuwählen. Es ist etwas kompakter als das Erstellen eines Tisches für VLOOKUP().

2
Robert

Ich weiß, dass es etwas spät ist, um zu antworten, aber ich denke, dieses kurze Video wird Ihnen sehr helfen.

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

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

In einem weiteren Video wird erläutert, wie Datenüberprüfung verwendet wird, um ein Dropdown-Fenster auszufüllen, das Sie aus einem begrenzten Bereich auswählen können.

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

Sie können die beiden kombinieren und den Wert in der Dropdown-Liste als Index für die Auswahlfunktion verwenden. Obwohl er nicht gezeigt hat, wie man sie kombiniert, bin ich mir sicher, dass Sie es herausfinden konnten, da seine Videos gut sind. Wenn du Probleme hast, lass es mich wissen und ich werde meine Antwort aktualisieren, um es dir zu zeigen.

1
Francis Rodgers

Ich verstehe, dass dies eine Antwort auf ein altes Post- 

Ich mag die If () - Funktion in Kombination 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 enthalten ist. Wenn sie größer als 0 ist, wird x zurückgegeben. Andernfalls wird das von der Index () - Funktion identifizierte Array (Informationstabelle) verwendet, das mit Match () ausgewählt wird, um den Wert zurückzugeben a entspricht.

Das Index-Array verfügt über die absolute Position $H$2:$I$9 (die Dollarzeichen), so dass sich der Ort, auf den es zeigt, beim Kopieren der Formel nicht ändert. Die Zeile mit dem Wert, den Sie zurückgeben möchten, wird durch die Funktion Match () identifiziert. Match () hat den zusätzlichen Nutzen, dass keine sortierte Liste zum Durchsuchen der von Vlookup () benötigten Anforderungen erforderlich ist. Match () kann den Wert mit einem Wert finden: 1 kleiner als, 0 exakt, -1 größer als. Ich habe nach dem absoluten Match () - Array $H$2:$H$9 eine Null eingefügt, um die genaue Übereinstimmung zu finden. Für die Spalte wird der Wert des Index () - Arrays eingegeben, das zurückgegeben werden soll. Ich habe eine 2 eingegeben, weil der Rückgabewert in meinem Array in der zweiten Spalte war. Unter meinem Index-Array sah das so aus:

32   1420

36   1650

40   1790

44   1860

55   2010

Der Wert in Ihrer 'a'-Spalte, nach dem in der Liste gesucht werden soll, befindet sich in der ersten Spalte meines Beispiels, und der entsprechende Wert, der zurückgegeben werden soll, befindet sich rechts. Die Nachschlag-/Referenztabelle kann sich auf jeder Registerkarte im Arbeitsbuch befinden - oder sogar in einer anderen Datei. -Book2 ist der Dateiname und Sheet2 ist der Name des anderen Registers.

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

Wenn Sie x nicht zurückgeben möchten, 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 möchten.

Unten ist der Beginn der Funktion, wobei das x gelöscht ist.

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

Microsoft ersetzt SWITCH, IFS und IFVALUES nur durch die Funktion AUSWAHL. 

=CHOOSE($L$1,"index_1","Index_2","Index_3")
0
Pit J

Auch wenn es alt ist, scheint dies eine beliebte Frage zu sein, deshalb werde ich eine andere Lösung posten, 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 WENN-Funktion verwendet. Im Grunde läuft es darauf hinaus:

if (Bedingung, wähle/benutze einen Wert aus der Tabelle, wenn (Bedingung, wähle/verwende einen anderen Wert aus der Tabelle ...

Und so weiter

Funktioniert wunderbar, sogar besser als HLOOKUP oder VLOOOKUP

aber ... Seien Sie gewarnt: Die Anzahl der geschachtelten Anweisungen ist begrenzt, wenn Excel-Anweisungen verarbeitet werden können.

0
Chiwda

Wenn Sie in Ihrer Excel-Version (vor Excel-2016) keine SWITCH-Anweisung haben, finden Sie hier eine VBA-Implementierung:

Public Function SWITCH(ParamArray args() As Variant) As Variant
    Dim i As Integer
    Dim val As Variant
    Dim tmp As Variant

    If ((UBound(args) - LBound(args)) = 0) Or (((UBound(args) - LBound(args)) Mod 2 = 0)) Then
        Error 450       'Invalid arguments
    Else
        val = args(LBound(args))
        i = LBound(args) + 1
        tmp = args(UBound(args))

        While (i < UBound(args))
            If val = args(i) Then
                tmp = args(i + 1)
            End If
            i = i + 2
        Wend
    End If

    SWITCH = tmp
End Function

Es funktioniert genau wie erwartet, ein Drop-In-Ersatz für die SWITCH-Funktion von Google Spreadsheet.

Syntax:

=SWITCH(selector; [keyN; valueN;] ...  defaultvalue)

woher

  • selektor ist jeder Ausdruck, der mit Schlüsseln verglichen wird
  • key1, key2, ... sind Ausdrücke, die mit dem Selektor verglichen werden
  • wert1, Wert2, ... sind Werte, die ausgewählt werden, wenn der Selektor dem entsprechenden Schlüssel entspricht (nur).
  • der Standardwert wird verwendet, wenn kein Schlüssel mit dem Selektor übereinstimmt

Beispiele:

=SWITCH("a";"?")                       returns "?"
=SWITCH("a";"a";"1";"?")               returns "1"
=SWITCH("x";"a";"1";"?")               returns "?"
=SWITCH("b";"a";"1";"b";TRUE;"?")      returns TRUE
=SWITCH(7;7;1;7;2;0)                   returns 2
=SWITCH("a";"a";"1")                   returns #VALUE!

Um es zu verwenden, öffnen Sie Ihr Excel, gehen Sie zur Registerkarte Entwicklungswerkzeuge, klicken Sie auf Visual Basic, klicken Sie mit der rechten Maustaste auf ThisWorkbook, wählen Sie Einfügen, dann Modul, und kopieren Sie den Code in den Editor. Sie müssen als makrofreundliche Excel-Arbeitsmappe (xlsm) speichern.

0
gaborsch

Wenn Sie Office 2019 oder Office 365 verwenden, gibt es eine neue Funktion, die einer CASE-Funktion mit dem NamenIFSähnelt. Hier ist die Beschreibung der Funktion aus der Microsoft-Dokumentation:

Die IFS-Funktion prüft, ob eine oder mehrere Bedingungen erfüllt sind, und gibt einen Wert zurück, der der ersten TRUE-Bedingung entspricht. IFS kann den Platz von mehreren verschachtelten IF-Anweisungen einnehmen und ist bei mehreren Bedingungen viel einfacher zu lesen.

Ein Anwendungsbeispiel folgt:

=IFS(A2>89,"A",A2>79,"B",A2>69,"C",A2>59,"D",TRUE,"F")

Sie können sogar ein Standardergebnis angeben:

Geben Sie zum Angeben eines Standardergebnisses TRUE als letztes Argument für logical_test ein. Wenn keine der anderen Bedingungen erfüllt ist, wird der entsprechende Wert zurückgegeben.

Die Standardergebnisfunktion ist in dem oben gezeigten Beispiel enthalten.

Weitere Informationen finden Sie unter Microsoft Support Documentation

0