Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
556to560
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
556to560
556to560
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

dynamischer IF

dynamischer IF
31.01.2005 10:11:44
Susanne
Hallo
Ich muss einen IF mit mehreren Bedingungen bilden, es handelt sich um eine Kombination aus "=", ">", " Vielen Dank für Eure Hilfe
susanne

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dynamischer IF
Michi
Hallo Susanne
Probiere es mit Select Case
lg
michi
AW: dynamischer IF
31.01.2005 10:22:57
Susanne
Hallo Michi
Danke für Deinen Input, aber es handelt sich um folgenden "if":
"if" a gleich b und c grösser d und e kleiner f und .... wobei das gleich ein grösser oder ein kleiner etc. sein könnte und dies in allen möglichen Kombinationen, da würde mir auch ein Select Case keine grosse Erleichterung bringen, oder?
Gruss
susanne
AW: dynamischer IF
Reinhard
Hi Susanne,
bring mal Beispielcode wieviele Variablen und wie abgefragt werden.
Gruß
Reinhard
AW: dynamischer IF
31.01.2005 10:32:52
Susanne
Hoffe das erklärt mein Problem nun mehr!
https://www.herber.de/bbs/user/17193.xls
gruss
susanne
Anzeige
AW: dynamischer IF
Reinhard
Hi Susanne,
das schweizerische Bankensystem kapier ich nun grad nicht so ganz :-)
M.E. erfüllt:

If (Sheets(strSheetName).Cells(lRowSec, 17).Value > dblDurationFrom) And _
(Sheets(strSheetName).Cells(lRowSec, 17).Value < dblDurationTo) And _
(Sheets(strSheetName).Cells(lRowSec, 9).Value = strRiskStyle) And _
(Sheets(strSheetName).Cells(lRowSec, 18).Value <= dblPrice) And _
(Sheets(strSheetName).Cells(lRowSec, 1).Value = "") Then jepp = True
Select Case intPriceOP
Case Is = 1, 2 ' price <=
Select Case intMinDenomOP
Case Is = 1 ' MinDenom <=
If jepp = True And (Sheets(strSheetName).Cells(lRowSec, 25).Value <= dblMinDenom) Then Call RegelTrifftZu
Case Is = 2 ' MinDenom >
If jepp = True And (Sheets(strSheetName).Cells(lRowSec, 25).Value > dblMinDenom) Then Call RegelTrifftZu
End Select
End Select

das Gleiche wie dein nachfolgender Code. Da ungetestet, Frage wieder auf noch offen gestellt.

Select Case intPriceOP
Case Is = 1 ' price <=
Select Case intMinDenomOP
Case Is = 1 ' MinDenom <=
If (Sheets(strSheetName).Cells(lRowSec, 17).Value > dblDurationFrom) And _
(Sheets(strSheetName).Cells(lRowSec, 17).Value < dblDurationTo) And _
(Sheets(strSheetName).Cells(lRowSec, 9).Value = strRiskStyle) And _
(Sheets(strSheetName).Cells(lRowSec, 18).Value <= dblPrice) And _
(Sheets(strSheetName).Cells(lRowSec, 25).Value <= dblMinDenom) And _
(Sheets(strSheetName).Cells(lRowSec, 1).Value = "") Then
Call RegelTrifftZu
End If
Case Is = 2 ' MinDenom >
If (Sheets(strSheetName).Cells(lRowSec, 17).Value > dblDurationFrom) And _
(Sheets(strSheetName).Cells(lRowSec, 17).Value < dblDurationTo) And _
(Sheets(strSheetName).Cells(lRowSec, 9).Value = strRiskStyle) And _
(Sheets(strSheetName).Cells(lRowSec, 18).Value <= dblPrice) And _
(Sheets(strSheetName).Cells(lRowSec, 25).Value > dblMinDenom) And _
(Sheets(strSheetName).Cells(lRowSec, 1).Value = "") Then
Call RegelTrifftZu
End If
Case Else
End Select
Case Is = 2 ' price >=
Select Case intMinDenomOP
Case Is = 1 ' MinDenom <=
If (Sheets(strSheetName).Cells(lRowSec, 17).Value > dblDurationFrom) And _
(Sheets(strSheetName).Cells(lRowSec, 17).Value < dblDurationTo) And _
(Sheets(strSheetName).Cells(lRowSec, 9).Value = strRiskStyle) And _
(Sheets(strSheetName).Cells(lRowSec, 18).Value <= dblPrice) And _
(Sheets(strSheetName).Cells(lRowSec, 25).Value <= dblMinDenom) And _
(Sheets(strSheetName).Cells(lRowSec, 1).Value = "") Then
Call RegelTrifftZu
End If
Case Is = 2 ' MinDenom >
If (Sheets(strSheetName).Cells(lRowSec, 17).Value > dblDurationFrom) And _
(Sheets(strSheetName).Cells(lRowSec, 17).Value < dblDurationTo) And _
(Sheets(strSheetName).Cells(lRowSec, 9).Value = strRiskStyle) And _
(Sheets(strSheetName).Cells(lRowSec, 18).Value <= dblPrice) And _
(Sheets(strSheetName).Cells(lRowSec, 25).Value > dblMinDenom) And _
(Sheets(strSheetName).Cells(lRowSec, 1).Value = "") Then
Call RegelTrifftZu
End If
Case Else
End Select
Case Else
End Select

Gruß
Reinhard
Anzeige
AW: dynamischer IF
Luc
Hallo Susanne,
Reinhard hat schon recht, dein Code ist unnötig aufgebläht. Dazu Folgendes:
Da offensichtlich sowohl bei intPriceOP=1 als auch bei intPriceOP=2 genau dasselbe abläuft, kann das schon mal zusammengefasst wdn.
Die Wiederholung langer And-Ketten in If-Verzweigungen vermeidet man, indem man zuvor einmalig entsprechende Boolean-Variablen anlegt.
Wenn diese als Feld angelegt wdn, kann man hier weiteren Code einsparen, zumal auch Case Else überflüssig ist.
So nützlich lange mnemonische Variablennamen auch sein mögen, die Übersichtlichkeit leidet. Man sieht den Wald vor lauter Bäumen nicht. Deshalb mein Tipp:
Ordentliche Variablenverwaltung zu Beginn mit Kurz- und Langnamensformen machen und mit Kurzformen pgm. Wenn's die Übersichtlichkeit zulässt, später austauschen, sonst als Rem-Legende vor PgmAnfang belassen.
Aus 47 Zeilen wdn 17 -- 30 Zeilen eingespart! --&gt
Dim w(2) As Boolean
w(0) = Sheets(ssn).Cells(z, 17).Value &gt dDF And _
Sheets(ssn).Cells(z, 17).Value &lt dDT And _
Sheets(ssn).Cells(z, 9).Value = sRS And _
Sheets(ssn).Cells(z, 18).Value &lt= dP And _
Sheets(ssn).Cells(z, 1).Value = "")
w(1) = w(0) And Sheets(ssn).Cells(z, 25).Value &lt= dMD
w(2) = w(0) And Sheets(ssn).Cells(z, 25).Value &gt dMD
Select Case iPop
Case 1, 2 ' price &lt=, &gt= also egal
Select Case iMDop
Case 1, 2 ' MD &lt= (1), &gt (2)
If w(iMDop) Then
Call RegelTrifftZu
End If
End Select
End Select
Das könnte dann auch eine bessere, weil übersichtlichere Grundlage für eine Dynamisierung sein.
Gruß Luc
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige