Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1592to1596
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
Inhaltsverzeichnis

Viele Bedinungen in einer IF-Abfrage mit And

Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 09:24:07
Anka
Hallo liebe Helfer,
ich möchte sehr viele Bedingungen (>20) in einer IF-Abfrage erstellen. Diese habe ich alle mit And verbunden, allerdings funktioniert das irgendwie nicht. Das Marko tut gar nichts, auch keine Fehlermeldung?
Gibt es eine maximale Anzahl an Bedingungen in einer If-Abfrage? Ich weis nicht wie ich das anders machen soll, da die Bedingungen alle voneinander abhängen, d.h. z.B. nur wenn bestimmte Zellen mit "Nein" bzw "Ja" versehen sind, soll die If-Abfrage erfolgen.
Unten ist mal meine Code (Die Variablen habe ich schon alle festgelegt, ich wollte die hier nur nicht alle aufführen):

' Definition der Quell-, Zieldatei und des Tabellenbereichs:
Dim wsQuelle As Worksheet                                   'Variable: Quelldatei anlegen
Dim wsZiel As Worksheet                                     'Variable: Zieldatei anlegen
Dim wsAuswahlmaske As Worksheet                             'Variable: Tabelle " _
Auswahlmaske" anlegen
Dim rng_Tabellenbereich As Range                            'Variable: Tabellenbereich  _
anlegen
'Dim TextBox1 As TextBox
Set wsQuelle = Worksheets("Kopie Wärmeatlas")                'Variable: Quelldatei "Kopie Wä _
rmeatlas festlegen
Set wsZiel = Worksheets("Zieltabelle")                       'Variable: Zieldatei " _
Zieltabelle" festlegen
Set wsAuswahlmaske = Worksheets("Auswahlmaske")             'Variable: Auswahlmakse  _
festlegen
Set rng_Tabellenbereich = wsQuelle.Range("$A$1:$W$166124")  'Variable: Tabellenbereich  _
festlegen
If str_filtern_Wohngebäude = "Ja" And str_filtern_Nichtwohngebäude = "Nein" And  _
str_filtern_Energieträger = "Nein" And str_filtern_FW = "Nein" _
And str_filtern_FWohneG = "Nein" And str_filtern_FWmitG = "Nein" And str_filtern_FWmitG_ND = _
_
"Nein" And str_filtern_FWmitG_MD = "Nein" And _
str_filtern_FWmitG_HD = "Nein" And str_filtern_GAS = "Nein" And str_filtern_GAS_ND = "Nein"  _
_
And str_filtern_GAS_MD = "Nein" _
And str_filtern_GAS_HD = "Nein" And str_filtern_ÖlKohle = "Nein" And str_filtern_Strom = "  _
_
Nein" And str_filtern_Wärmebedarf = "" _
And str_filtern_Nutzungsart = "Nein" And str_filtern_EFH = "Nein" And str_filtern_MFH = " _
Nein" And str_filtern_GMH = "Nein" And str_filtern_HH = "Nein" _
And str_filtern_Gebäudegröße = "" And str_filtern_Gebäudeumbau = "Nein" And str_filtern_PV = _
_
"Nein" _
And str_filtern_PVsehrgut = "Nein" And str_filtern_PVgut = "Nein" And str_filtern_PVbedingt  _
_
= "Nein" And str_filtern_PVvorOrt = "Nein" Then
rng_Tabellenbereich.AutoFilter , Field:=7, Criteria1:=Array("Wochenendhaus", "Wohnhaus", "  _
_
Wohnheim"), Operator:=xlFilterValues
End If
Wisst Ihr eine Lösung?
Ich sitze da jetzt schon ewig dran und weis nicht mehr weiter!
Viele Grüße,
Anka

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 09:43:21
Werner
Hallo Anka,
machs mal nach diesem Muster:
Dim str1 As String, str2 As String, str3 As String, str4 As String, str5 As String
str1 = "Ja"
str2 = "Nein"
str3 = "Nein"
str4 = "Nein"
str5 = "Nein"
If str1 = "Ja" Then
If str2 = "Nein" Then
If str3 = "Nein" Then
If str4 = "Nein" Then
If str5 = "Nein" Then
MsgBox "Hurra"
End If
End If
End If
End If
End If
Gruß Werner
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 10:49:19
Anka
Hallo Werner,
ich habe meine If-Abfragen so wie Du sie oben aufgelistet hast übernommen, dann macht er es nur bis zum 10. If und danach springt er sofort in End If.
Dann habe ich mal alles nach dem 10. If gelöscht und dandach die AutoFilter Funktion eingefügt, damit er danach eben filtert. Das macht er dann aber auch nicht. Er hüpft trotzdem direkt in End if und dann passiert gar nichts. Meine zu filternde Datei bleibt unberührt!
Was soll jetzt machen? Gibt es eine andere Möglichkeit?
Liebe Grüße,
Anka
Anzeige
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 09:50:45
yummi
Hallo Anka,
du hast in einigen Abfragen "Nein" abgefragtund in anderen " Nein"
Ist das Absicht oder kommt es dadurch zum Fehler?
Ansonsten kannst Du anstatt and auch die if Abfrage schachteln um zu schauen, welche Bedingung dazu führt, dass es nicht ausgewertet wird.
Also anstatt

If str_filtern_Wohngebäude = "Ja" And str_filtern_Nichtwohngebäude = "Nein" And  _
str_filtern_Energieträger = "Nein" And str_filtern_FW = "Nein"
so

If str_filtern_Wohngebäude = "Ja" then
if str_filtern_Nichtwohngebäude = "Nein" then
if str_filtern_Energieträger = "Nein"
if str_filtern_FW = "Nein" then
end if
end if
end if
end if
Das kannst du dann im Debugger schrittweise durchsteppen und schauen, wo es nciht so ausgewertet wird wie du es erwartest.
Gruß
yummi
Anzeige
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 11:04:27
Daniel
Hi
Da eine Programmzeile in VBA nich beliebig lang sein kann, würde ich die einzelnen Bedingungen über eine Hilfsvariable zusammenführen.
bei sehr vielen Bedingungen beispielsweise so, hier kannst du jede einzelne Bedingungsprüfung in einer eigenen Zeile durchführen, was auch wesentlich übersichtlicher ist.
dim Check as Boolean
Check = True
Check = Check AND str_filtern_Wohngebäude = "Ja
Check = Check AND str_filtern_Nichtwohngebäude = "Nein"
Check = Check AND str_filtern_Energieträger = "Nein"
Check = Check AND str_filtern_FW = "Nein"
... usw für alle anderen AND-Bedingungen
Check = Check AND str_filtern_PVvorOrt = "Nein"
if Check then
rng_Tabellenbereich.AutoFilter , Field:=7, _
Criteria1:=Array("Wochenendhaus", "Wohnhaus", "Wohnheim"), _
Operator:=xlFilterValues
end if
Gruß Daniel
Anzeige
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 11:47:36
Anka
Hallo Daniel,
danke für Deine Antwort.
Ich habe jetzt mal alles so gemacht, wie Du meintest, hier ist der Code:
Dim Check As Boolean
Check = True
Check = Check And str_filtern_Wohngebäude = "Ja"
Check = Check And str_filtern_Nichtwohngebäude = "Nein"
Check = Check And str_filtern_Energieträger = "Nein"
Check = Check And str_filtern_FW = "Nein"
Check = Check And str_filtern_FWohneG = "Nein"
Check = Check And str_filtern_FWmitG = "Nein"
Check = Check And str_filtern_FWmitG_GAS_ND = "Nein"
Check = Check And str_filtern_FWmitG_GAS_MD = "Nein"
Check = Check And str_filtern_FWmitG_GAS_HD = "Nein"
Check = Check And str_filtern_GAS = "Nein"
Check = Check And str_filtern_GAS_ND = "Nein"
Check = Check And str_filtern_GAS_MD = "Nein"
Check = Check And str_filtern_GAS_HD = "Nein"
Check = Check And str_filtern_ÖlKohle = "Nein"
Check = Check And str_filtern_Strom = "Nein"
Check = Check And str_filtern_Wärmebedarf = "0"
Check = Check And str_filtern_Gebäudeart = "Nein"
Check = Check And str_filtern_EFH = "Nein"
Check = Check And str_filtern_MFH = "Nein"
Check = Check And str_filtern_GMH = "Nein"
Check = Check And str_filtern_HH = "Nein"
Check = Check And str_filtern_Gebäudegröße = "0"
Check = Check And str_filtern_Gebäudeumbau = "Nein"
Check = Check And str_filtern_PV = "Nein"
Check = Check And str_filtern_PVsehrgut = "Nein"
Check = Check And str_filtern_PVgut = "Nein"
Check = Check And str_filtern_PVbedingt = "Nein"
Check = Check And str_filtern_PVvorOrt = "Nein"
If Check Then
rng_Tabellenbereich.AutoFilter , Field:=7, Criteria1:=Array("Wochenendhaus", "Wohnhaus", " _
Wohnheim"),  Operator:=xlFilterValues
End If
Aber er hüpft wieder über den Autofilter, ohne diesen auzuführen. Zusätzlich ist das Check als "False" hinterlegt, woran liegt das?
Gruß,
Anka
Anzeige
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 12:10:52
UweD
Hallo
setzt doch probehalber mal eine msgbox hinter jede Zeile
und lass das Makro per Einzelschritt durchlaufen F8
dann erkennst du in Welcher Zeite das False gesetzt wird

Check = Check And str_filtern_Wohngebäude = "Ja"
Msgbox Check
Check = Check And str_filtern_Nichtwohngebäude = "Nein"
Msgbox Check
Check = Check And str_filtern_Energieträger = "Nein"
Msgbox Check
Check = Check And str_filtern_FW = "Nein"
Msgbox Check
Check = Check And str_filtern_FWohneG = "Nein"

LG UweD
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 13:09:37
Anka
Hallo Uwe,
vielen Dank für Deine Antwort! Das hat mir schon viel weitergeholfen, denn jetzt macht er zumindest alle Checkabfragen durch.
ABER: nach dem letzten "Check" hüpft er direkt in das End if, ohne die Autofilter Funktion zu beachten. Ich denke deswegen passiert dann auch nichts. Aber warum? Die AutoFilter Funktion an sich funktioniert, das habe ich schon in einem leeren Blatt getestet.....
Weis jemand eine Lösung? Ich bräuchte das für meine Masterarbeit :(
Liebe Grüße,
Anka
Anzeige
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 14:46:07
Daniel
Hi
da muss irgendeine Prüfung nicht ganz korrekt geschrieben sein und ein FALSE ausgeben, wo du ein TRUE erwartest.
wie gesagt, gehe den Code im Einzelstepmodus durch (F8) und prüfe nach jeder Zeile den Zustand Variable Check (dh du musst die Zeile finden, in welcher der Wert für Check von True auf False wechselt) und vergleiche dann den Inhalt der Variable str_filtern_xxx mit dem Sollwert in der jeweiligen Zeile.
Wenn du während des Programmdurchlaufs im Einzelstepmodus mit der Maus über den Variablennamen fährst, sollte dir der Variablenwert angezeigt werden.
Auf diese Weise solltest du die Zeile, in welcher das Problem verursacht wird, herausfinden können.
Gruß Daniel
Anzeige
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 16:27:49
Anka
Hallo Daniel,
vielen Dank für Deine Antwort. Ich finde es echt total klasse, dass Du vesuchst mir zu helfen.
Ich habe jetzt alles überprüft: In meiner Eingabemaske sind alle Antworten bis auf eine Zelle mit "Nein" hinterlegt und meine strings zeigen auch alle das gleiche an was in der Auswahlmaske steht.
Dann bin ich die Check-Abfragen durchgegangen und nach dem 9.Check kommt wieder eine MsgBox ab da, springt die ganze Abfrage auf False um. Auch mein Befehl ganz oben Check = True zeigt, wenn ich mit der Maus drüberfahre False an, obwohl True dortsteht.
Habe ich vielleicht zu viele Check-Abfragen? Gibt es da eine Begrenzung bei Excel?
Hier ist nochmal einen Link zu einem Screenshot. Ab der gelben Markierung springt alles "Falsch" um:
Userbild
Ich bin echt ein bisschen am verzweifeln, eigentlich sollte das Tool ein wichtiger Teil meiner Masterarbeit sein und jetzt funktioniert es nur eingeschränkt?!
Gruß,
Anka
Anzeige
AW: Viele Bedinungen in einer IF-Abfrage mit And
05.12.2017 16:46:50
Daniel
Hi
dann steht in der Variable str_filternFWmitG_Gas_HD nicht "Nein" sondern ein anderer Text
damit die Msgbox einen Sinn hat, müsste sie so aussehen:
Msgbox Check & " - " & str_FilternFWmitG_Gas_HD
auf diese weise würdest du die Variable Check gleich mit auswerten.
wenn du den Wert einer Variable in der Messagebox angezeigt haben willst, darfst du die Variable nicht in Anführungszeichen setzen!
nochmal: wenn du mit der Maus über die Variable fährst, wird dir ihr aktueller Wert angezeigt, dh relevant ist die Zuweisung in der Zeile, die oberhalb der gelben Markierung steht.
Die gelbe Markierung im einzelstepmodus zeigt dir an, welche Programmzeile als nächstes ausgeführt wird.
Gruß Daniel
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige