Excel: Verschachtelte WENN-Abfragen anschaulich darstellen?

Dieses Thema Excel: Verschachtelte WENN-Abfragen anschaulich darstellen? im Forum "Microsoft Office Suite" wurde erstellt von Ace_NoOne, 7. Dez. 2005.

Thema: Excel: Verschachtelte WENN-Abfragen anschaulich darstellen? Hallo zusammen, in einer Excel-Tabelle muss ich eine ziemlich komplizierte WENN-Abfrage einbauen (ein Makro möchte...

  1. Hallo zusammen,

    in einer Excel-Tabelle muss ich eine ziemlich komplizierte WENN-Abfrage einbauen (ein Makro möchte ich hierfür nicht verwenden). Die habe ich mir zur besseren Übersicht logisch strukturiert:
    Code:
    Startpreis := P#
    Zielpreis := Q#
    Währung  := SVERWEIS(A2;'Sheet1 (2)'!$A$1:$AB$10000;11;FALSCH)
    pVolume  := R# [= aktuelle Zelle]
    conv_USD  := $U$2 [ca. 0,83080]
    conv_SKK  := $V$2 [ca. 0,02562]
    conv_CZK  := $W$2 [ca. 0,03388]
    
    WENN Startpreis > Zielpreis
    	WENN Währung = EUR
    		pVolume = Startpreis
    	SONST-> Währung <> EUR
    		WENN Währung = USD
    			pVolume = Startpreis * conv_USD
    		SONST-> Währung <> USD
    			WENN Währung = SKK
    				pVolume = Startpreis * conv_SKK
    			SONST-> Währung <> SKK
    				WENN Währung = CZK
    					pVolume = Startpreis * conv_CZK
    SONST-> Zielpreis > Startpreis
    	wenn Währung <> EUR
    		pVolume = Zielpreis
    	SONST-> Währung <> EUR
    		WENN Währung = USD
    			pVolume = Zielpreis * conv_USD
    		SONST-> Währung <> USD
    			WENN Währung = SKK
    				pVolume = Zielpreis * conv_SKK
    			SONST-> Währung <> SKK
    				WENN Währung = CZK
    					pVolume = Zielpreis * conv_CZK
    Mein Problem ist nun, das Ganze in eine einzige Formel zu bringen. Schon ab der zweiten Abfrage wird das nämlich furchtbar unübersichtlich, sodass die Umsetzung obiger Struktur in eine Zeile sehr schwierig wird:
    Code:
    =Wenn(P5 > Q5; Wenn(SVERWEIS(A5;'Sheet1 (2)'!$A$1:$AB$10000;11;FALSCH) = EUR; P5; nicht EUR); [...])
    Gibt es da einen Trick, wie ich das vereinfachen könnte?


    UPDATE:
    Für diesen Fall hab' ich's gelöst, denke ich:
    Code:
    =Wenn(P5 > Q5;
    	Wenn(SVERWEIS(A5;->Sheet1 (2)'!$A$1:$AB$10000; 11; FALSCH) = EUR;
    		P5;
    		Wenn(SVERWEIS(A5;->Sheet1 (2)'!$A$1:$AB$10000; 11; FALSCH) = USD;
    			P5 * $U$2;
    			Wenn(SVERWEIS(A5;->Sheet1 (2)'!$A$1:$AB$10000; 11; FALSCH) = SKK;
    				P5 * $V$2;
    				Wenn(SVERWEIS(A5;->Sheet1 (2)'!$A$1:$AB$10000; 11; FALSCH) = CZK;
    					P5 * $W$2;
    					¿¡Währung!?
    				)
    			)
    		)
    	);
    	Wenn(SVERWEIS(A5;->Sheet1 (2)'!$A$1:$AB$10000; 11; FALSCH) = EUR;
    		Q5;
    		Wenn(SVERWEIS(A5;->Sheet1 (2)'!$A$1:$AB$10000; 11; FALSCH) = USD;
    			Q5 * $U$2;
    			Wenn(SVERWEIS(A5;->Sheet1 (2)'!$A$1:$AB$10000; 11; FALSCH) = SKK;
    				Q5 * $V$2;
    				Wenn(SVERWEIS(A5;->Sheet1 (2)'!$A$1:$AB$10000; 11; FALSCH) = CZK;
    					Q5 * $W$2;
    					¿¡Währung!?
    				)
    			)
    		)
    	);
    )
    (Da müssen natürlich noch die Zeilenumbrüche und Tabs entfernt werden.)
    Trotzdem, das grundsätzliche Problem besteht weiterhin...
     
  2. Hallo,

    sry - mir ist das zu unübersichtlich. Kannst du eben sagen, welche Kriterien geprüft werden sollen und welches Ereignis/ Ergebnis erzielt werden soll?


    Ciao


    Fibo
     
  3. Hallo Ace_NoOne,

    das mit den vielen->WENN' klappt nicht. Da ist bei Anzahl 7 Schluß, mehr kann Excel nicht  :mad:

    Es gibt 2 Lösungsmöglichkeiten:

    a) die komplexe Formel in viele, viele Hilfsspalten aufteilen (das ist nicht mein Fall)
    b) eine Function (Makro) schreiben, die man dann in einer Formel benutzen kann.

    Für Fall b) hab ich dir einen Makro gestrickt. Den packst Du in ein Modul in deiner Datei.

    Der Aufruf als Formel sähe dann so aus:
    Code:
    =PreisBerechnenInEuro(P5;Q5;SVERWEIS(A5;'Sheet1 (2)'!$A$1:$AB$10000;11;FALSCH)
    ;$U$2;$V$2;$W$2)
    
    Gruß Matjes :)
    Code:
    Option Explicit
    Function PreisBerechnenInEuro(r_StartPreis As Range, _
                                  r_Zielpreis As Range, _
                                  s_Waehrung As Variant, _
                                  r_Umrechnung_USD As Range, _
                                  r_Umrechnung_SKK As Range, _
                                  r_Umrechnung_CZK As Range) As Variant
    
      Const c_TXT1 =  DARF NUR EINE ZELLE UMFASSEN
      Const c_TXT2 =  HAT KEIN WÄHRUNGSFORMAT
      Const c_TXT3 =  HAT KEIN DOUBLE-FORMAT
      
      Dim d_StartPreis As Double, d_ZielPreis As Double, d_Preis As Double
      Dim d_Umrechnung_USD As Double, d_Umrechnung_SKK As Double, d_Umrechnung_CZK As Double
    
     ->angegebene Bereiche prüfen
      If r_StartPreis.Count <> 1 Then PreisBerechnenInEuro = #RANGE STARTPREIS & c_TXT1: GoTo AUFRAEUMEN
      If r_Zielpreis.Count <> 1 Then PreisBerechnenInEuro = #RANGE ZIELPREIS & c_TXT1: GoTo AUFRAEUMEN
      If r_Umrechnung_USD.Count <> 1 Then PreisBerechnenInEuro = #RANGE Umrechnung USD & c_TXT1: GoTo AUFRAEUMEN
      If r_Umrechnung_SKK.Count <> 1 Then PreisBerechnenInEuro = #RANGE Umrechnung SKK & c_TXT1: GoTo AUFRAEUMEN
      If r_Umrechnung_CZK.Count <> 1 Then PreisBerechnenInEuro = #RANGE Umrechnung CZK & c_TXT1: GoTo AUFRAEUMEN
      
      On Error Resume Next
      
     ->Preise auf Format prüfen
      d_StartPreis = r_StartPreis.Value
      If Err.Number <> 0 Then PreisBerechnenInEuro = #STARTPREIS & c_TXT2: GoTo AUFRAEUMEN
      d_ZielPreis = r_Zielpreis.Value
      If Err.Number <> 0 Then PreisBerechnenInEuro = #ZIELPREIS & c_TXT2: GoTo AUFRAEUMEN
      
     ->Umrechnunge auf Format prüfen
      d_Umrechnung_USD = r_Umrechnung_USD.Value
      If Err.Number <> 0 Then PreisBerechnenInEuro = #Umrechnungskurs USD & c_TXT3: GoTo AUFRAEUMEN
      If d_Umrechnung_USD = 0 Then PreisBerechnenInEuro = #Umrechnungskurs USD = 0: GoTo AUFRAEUMEN
      d_Umrechnung_SKK = r_Umrechnung_SKK.Value
      If Err.Number <> 0 Then PreisBerechnenInEuro = #Umrechnungskurs USD & c_TXT3: GoTo AUFRAEUMEN
      If d_Umrechnung_SKK = 0 Then PreisBerechnenInEuro = #Umrechnungskurs SKK = 0: GoTo AUFRAEUMEN
      d_Umrechnung_CZK = r_Umrechnung_CZK.Value
      If Err.Number <> 0 Then PreisBerechnenInEuro = #Umrechnungskurs USD & c_TXT3: GoTo AUFRAEUMEN
      If d_Umrechnung_CZK = 0 Then PreisBerechnenInEuro = #Umrechnungskurs CZK = 0: GoTo AUFRAEUMEN
      
      On Error GoTo 0
      
     ->zu benutzenden Preis zuweisen
      If d_StartPreis > d_ZielPreis Then d_Preis = d_StartPreis Else d_Preis = d_ZielPreis
      
     ->Berechnen entsprechend Waehrung
      Select Case s_Waehrung
        Case EUR: PreisBerechnenInEuro = d_Preis
        Case USD: PreisBerechnenInEuro = d_Preis * d_Umrechnung_USD
        Case SKK: PreisBerechnenInEuro = d_Preis * d_Umrechnung_SKK
        Case CZK: PreisBerechnenInEuro = d_Preis * d_Umrechnung_CZK
        Case Else: PreisBerechnenInEuro = #WAEHRUNG UNBEKANNT ( & s_Waehrung & )
      End Select
      
    AUFRAEUMEN:
      Err.Clear: On Error GoTo 0
    End Function
     
  4. Matjes, du machst mir Angst! :eek:
    Man könnte fast meinen, ich würde dir Gehalt zahlen...

    Deine Funktion klappt (natürlich) perfekt - besten Dank!!
     
Die Seite wird geladen...

Excel: Verschachtelte WENN-Abfragen anschaulich darstellen? - Ähnliche Themen

Forum Datum
Excel 2003 Verschachtelte Wenn-Funktion Microsoft Office Suite 30. Jan. 2009
verschachtelte Wenn Funktion in Excel Microsoft Office Suite 16. Nov. 2004
Excel-Feature gesucht Microsoft Office Suite 11. Okt. 2016
Excel Tabelle Werte zu ordnen Microsoft Office Suite 23. Sep. 2016
Excel: Bereiche auf 'leer' Überprüfen Microsoft Office Suite 15. Sep. 2016