Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Viele Bedinungen in einer IF-Abfrage mit And


Betrifft: Viele Bedinungen in einer IF-Abfrage mit And von: Anka
Geschrieben am: 05.12.2017 09:24:07

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

  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: Werner
Geschrieben am: 05.12.2017 09:43:21

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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: Anka
Geschrieben am: 05.12.2017 10:49:19

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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: yummi
Geschrieben am: 05.12.2017 09:50:45

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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: Daniel
Geschrieben am: 05.12.2017 11:04:27

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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: Anka
Geschrieben am: 05.12.2017 11:47:36

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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: UweD
Geschrieben am: 05.12.2017 12:10:52

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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: Anka
Geschrieben am: 05.12.2017 13:09:37

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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: Daniel
Geschrieben am: 05.12.2017 14:46:07

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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: Anka
Geschrieben am: 05.12.2017 16:27:49

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:



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


  

Betrifft: AW: Viele Bedinungen in einer IF-Abfrage mit And von: Daniel
Geschrieben am: 05.12.2017 16:46:50

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