Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Viele Bedinungen in einer IF-Abfrage mit And

Forumthread: 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
Anzeige

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
Anzeige
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
Anzeige
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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Viele Bedingungen in einer IF-Abfrage mit And in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Variablen definieren: Erstelle Variablen für deine Bedingungen. Achte darauf, dass die Namen der Variablen leicht verständlich sind.

    Dim str_filtern_Wohngebäude As String
    Dim str_filtern_Nichtwohngebäude As String
    ' Weitere Variablen...
  2. Bedingungen festlegen: Setze die Bedingungen für deine IF-Abfrage. Du kannst die Bedingungen mit And kombinieren.

    If str_filtern_Wohngebäude = "Ja" And str_filtern_Nichtwohngebäude = "Nein" Then
        ' Aktion ausführen
    End If
  3. Hilfsvariable verwenden: Wenn du viele Bedingungen hast, kannst du eine Hilfsvariable verwenden, um die Übersichtlichkeit zu verbessern.

    Dim Check As Boolean
    Check = True
    Check = Check And str_filtern_Wohngebäude = "Ja"
    Check = Check And str_filtern_Nichtwohngebäude = "Nein"
    ' Weitere Bedingungen...
    If Check Then
        ' Aktion ausführen
    End If
  4. AutoFilter verwenden: Setze den AutoFilter ein, um die gewünschten Daten zu filtern.

    rng_Tabellenbereich.AutoFilter Field:=7, Criteria1:=Array("Wochenendhaus", "Wohnhaus", "Wohnheim"), Operator:=xlFilterValues

Häufige Fehler und Lösungen

  • Fehlerhafte Bedingungen: Überprüfe, ob die Variablen tatsächlich die erwarteten Werte haben. Füge MsgBoxen hinzu, um die Werte während der Ausführung zu überprüfen.

    MsgBox str_filtern_Wohngebäude
  • Maximale Anzahl von Bedingungen: In Excel VBA gibt es keine festgelegte maximale Anzahl an Bedingungen, doch lange Zeilen können die Lesbarkeit beeinträchtigen. Überlege, ob du die Bedingungen aufteilen kannst.

  • Whitespace-Probleme: Achte darauf, dass du keine zusätzlichen Leerzeichen in den Bedingungen hast, wie z.B. " Nein" statt "Nein".


Alternative Methoden

  • Schachteln von IF-Abfragen: Du kannst auch mehrere IF-Abfragen schachteln, um komplexe Bedingungen zu überprüfen.

    If str_filtern_Wohngebäude = "Ja" Then
        If str_filtern_Nichtwohngebäude = "Nein" Then
            ' Weitere Prüfungen...
        End If
    End If
  • Verwendung von Select Case: Eine Alternative zur Verwendung von If-Bedingungen ist die Select Case-Anweisung, die bei mehreren möglichen Werten nützlich sein kann.

    Select Case str_filtern_Wohngebäude
        Case "Ja"
            ' Aktion ausführen
        Case "Nein"
            ' Andere Aktion
    End Select

Praktische Beispiele

Hier ein einfaches Beispiel für eine IF-Abfrage mit mehreren Bedingungen:

Dim Check As Boolean
Check = True
Check = Check And str_filtern_Energieträger = "Nein"
Check = Check And str_filtern_FW = "Nein"

If Check Then
    MsgBox "Alle Bedingungen erfüllt!"
End If

In diesem Beispiel wird überprüft, ob alle Bedingungen erfüllt sind, bevor eine Nachricht angezeigt wird.


Tipps für Profis

  • Debugging: Nutze den Debugger, um Schritt für Schritt durch den Code zu gehen. Das hilft, die Ursache von Problemen zu finden.

  • Code kommentieren: Kommentiere deinen Code, um die Logik verständlicher zu machen. Dies ist besonders nützlich bei komplexen IF-Abfragen.

  • Verwende Arrays: Wenn du viele ähnliche Bedingungen hast, kannst du Arrays nutzen, um die Bedingungen dynamisch zu prüfen.


FAQ: Häufige Fragen

1. Gibt es eine maximale Anzahl an Bedingungen in einer IF-Abfrage in Excel VBA?
Es gibt keine festgelegte maximale Anzahl, aber lange Zeilen können die Lesbarkeit beeinträchtigen.

2. Warum wird die AutoFilter-Funktion nicht ausgeführt?
Überprüfe die Bedingungen in deiner IF-Abfrage. Wenn eine Bedingung nicht erfüllt ist, wird der AutoFilter nicht angewendet.

3. Wie kann ich Fehler in meiner IF-Abfrage finden?
Nutze MsgBoxen, um die Werte deiner Variablen während der Ausführung zu überprüfen, und gehe den Code im Einzelstepmodus durch (F8).

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige