If / ElseIf mit zusätzlicher If-Verschachtelung
#1
Hallo zusammen,

ich habe eine wahrscheinlich simple Frage, die ich aber nicht zufriedenstellend gelöst bekomme. Ich habe nachfolgenden Code erstelle (Auszug):

Code:
Sub Auswerten()

Dim i As Integer
Dim jx As Integer

    For i = 1 To 10
       
        For jx = 1 To 10
       
        If Worksheets("Tabelle1").Cells(jx, 30) = Worksheets("Tabelle1").Cells(i, 12) Then
            If Worksheets("Tabelle1").Cells(i, 9) = "Fussball" And Worksheets("Tabelle1").Cells(i, 10) = "Handball" Then
                If Worksheets("Tabelle1").Cells(jx, 32) = "x" Then
                Worksheets("Tabelle1").Cells(i, 16) = "Rasen"
                Worksheets("Tabelle1").Cells(i, 17) = "Tor"
                End If
            End If

        ElseIf Worksheets("Tabelle1").Cells(jx, 30) = Worksheets("Tabelle1").Cells(i, 12) Then
            If Worksheets("Tabelle1").Cells(i, 9) = "Tennis" And Worksheets("Tabelle1").Cells(i, 10) = "Tischtennis" Then
                If Worksheets("Tabelle1").Cells(jx, 35) = "x" Then
                Worksheets("Tabelle1").Cells(i, 16) = "Schläger"
                Worksheets("Tabelle1").Cells(i, 17) = "Netz"
                End If
            End If
       
        Else
        End If
        Next
    Next

End Sub

Was ich nicht verstehe ist folgendes: Gehe ich den Code durch und lande in der ersten "If-Bedingung", springt er (wenn diese nicht erfüllt wird) automatisch in die nächste "ElseIf" Zeile. Soll ja auch so sein.
Wird die erste "If-Bedingung" jedoch erfüllt, und er springt in die nächste "If"-Bedingung darunter (hier Prüfung ob Wörter "Fussball" und "Handball" vorhanden), springt er anschließend wenn diese Bedingung nicht erfüllt wird nicht zur nächsten "ElseIf" Zeile, sondern an das Ende des Codes. Wie kann ich das korrigieren?

Was eine Möglichkeit wäre, ist es wie folgt anzupassen:

Code:
Sub Auswerten()

Dim i As Integer
Dim jx As Integer

    For i = 1 To 10
       
        For jx = 1 To 10
       
        If Worksheets("Tabelle1").Cells(jx, 30) = Worksheets("Tabelle1").Cells(i, 12) And Worksheets("Tabelle1").Cells(i, 9) = "Fussball" And Worksheets("Tabelle1").Cells(i, 10) = "Handball" And Worksheets("Tabelle1").Cells(jx, 32) = "x" Then
                Worksheets("Tabelle1").Cells(i, 16) = "Rasen"
                Worksheets("Tabelle1").Cells(i, 17) = "Tor"

        ElseIf Worksheets("Tabelle1").Cells(jx, 30) = Worksheets("Tabelle1").Cells(i, 12) And Worksheets("Tabelle1").Cells(i, 9) = "Tennis" And Worksheets("Tabelle1").Cells(i, 10) = "Tischtennis" And Worksheets("Tabelle1").Cells(jx, 35) = "x" Then
                Worksheets("Tabelle1").Cells(i, 16) = "Schläger"
                Worksheets("Tabelle1").Cells(i, 17) = "Netz"
       
        Else
        End If
        Next
    Next

End Sub

Es wurmt mich allerdings, dass ich es mit dem ersten Ansatz nicht gelöst bekomme und bei vielen "Und"-Verknüpfungen wird es dann ja auch irgendwann ziemlich unübersichtlich.
Das geht doch bestimmt auch mit dem ersten Ansatz, oder?

Viele Grüße
Sebbo
Top
#2
PHP-Code:
Dim i As Integer
Dim jx 
As Integer
   
For 1 To 10
      
For jx 1 To 10
         
If Worksheets("Tabelle1").Cells(jx30) = Worksheets("Tabelle1").Cells(i12Then
            
If Worksheets("Tabelle1").Cells(jx32) = "x" Then
               Worksheets
("Tabelle1").Cells(i16) = "Rasen"
               Worksheets("Tabelle1").Cells(i17) = "Tor"
            End If
            If Worksheets("Tabelle1").Cells(i9) = "Tennis" And _
            Worksheets
("Tabelle1").Cells(i10) = "Tischtennis" And _
            Worksheets
("Tabelle1").Cells(jx35) = "x" Then
               Worksheets
("Tabelle1").Cells(i16) = "Schläger"
               Worksheets("Tabelle1").Cells(i17) = "Netz"
            End If
         End If
      Next
   Next
End Sub 
WIN/MSO schicken angeblich alle 5 Sekunden Deinen Screen heim zu Papa (recall-Klausel). 
Top
#3
Hallo,

Du prüfst in der If-Bedingung und in der ElseIf-Bedingung jeweils dasselbe. Wieso das denn?

Code:
Sub Auswerten()

Dim i As Integer
Dim jx As Integer

    For i = 1 To 10
        
        For jx = 1 To 10
        
        If Worksheets("Tabelle1").Cells(jx, 30) = Worksheets("Tabelle1").Cells(i, 12) Then
            If Worksheets("Tabelle1").Cells(i, 9) = "Fussball" And Worksheets("Tabelle1").Cells(i, 10) = "Handball" Then
                If Worksheets("Tabelle1").Cells(jx, 32) = "x" Then
                Worksheets("Tabelle1").Cells(i, 16) = "Rasen"
                Worksheets("Tabelle1").Cells(i, 17) = "Tor"
                End If
            End If

            If Worksheets("Tabelle1").Cells(i, 9) = "Tennis" And Worksheets("Tabelle1").Cells(i, 10) = "Tischtennis" Then
                If Worksheets("Tabelle1").Cells(jx, 35) = "x" Then
                Worksheets("Tabelle1").Cells(i, 16) = "Schl?ger"
                Worksheets("Tabelle1").Cells(i, 17) = "Netz"
                End If
            End If
        
        'Else  'wenn da eh nichts ist, kannst Du es l?schen
        End If
        Next
    Next

End Sub
Gruß Stefan
Win 10 / Office 2016
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste