Excel: Verschachtelte WENN-Abfragen anschaulich darstellen?

  • #1
A

Ace_NoOne

Bekanntes Mitglied
Themenersteller
Dabei seit
07.04.2002
Beiträge
403
Reaktionspunkte
0
Ort
Germany
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!!
 
Thema:

Excel: Verschachtelte WENN-Abfragen anschaulich darstellen?

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben