2016-12-14 3 views
1

Der folgende Code ist eine Art Auszug aus meinem vollständigen Sub, nur weil es hier leichter zu lesen ist. Ich muss einigen Fällen weitere Kriterien hinzufügen, und ich bin mir nicht sicher, wie ich das umsetzen soll.Excel - Select Case mit mehreren Kriterien

Um zusammenzufassen, was das in einer Zeile macht, wenn Spalte K ein Wort hat, das mit B, M oder D beginnt, führt es eine Reihe von Fällen aus. Wenn Spalte K ein Wort hat, das mit einem A beginnt, wird ein anderer Satz von Fällen ausgeführt. Auch das funktioniert. Aber in einigen dieser Fälle brauche ich mehr Kriterien, anstatt nur Spalte O zu betrachten.

Zum Beispiel muss im ersten Fall nach "University of Illinois" und "UofI" gesucht werden, aber es muss auch Spalte P für die Werte von "Urbana" und "Chicago" überprüfen. Wie kann ich das machen?

Sub Test4() 
    Dim LastRow As Long 
    Dim i As Long 
    LastRow = Range("O" & Rows.Count).End(xlUp).Row 
    For i = 84 To LastRow 
     If Range("K" & i) Like "B*" Or Range("K" & i) Like "M*" Or Range("K" & i) Like "D*" Then 
      Select Case Range("O" & i) 
       Case "University of Illinois", "UofI" 
        Range("N" & i) = "1234" 
      End Select 
     End If 
     If Range("K" & i) Like "A*" Then 
      Select Case Range("O" & i) 
       Case "New York University", "NYU" 
        Range("N" & i) = "5075" 
      End Select 
     End If 
    Next i 
End Sub 
+0

gehen könnten Sie vielleicht Ihre select case-Anweisungen Runde 'drehen konnten wählen Case True "und dann könnte Ihr erster Fall" Range ("O" & i) = "Universität von Illinois" und Range ("P" & i) = "Urbana" sein (aber dann können Sie auch 'If '). – SJR

+0

Wenn die Bedingungen für die verschiedenen Fälle mehrere Kriterien basierend auf mehreren Werten umfassen, warum nicht einfach eine 'If - Then - ElseIf ...' Kaskade statt 'Select Case' verwenden? Dadurch können Sie in den Bedingungen Boolesche Operatoren verwenden. –

+0

@Robby versuchen Sie den Code in meinem Work-Around-Antwort unten gibt es eine Möglichkeit, "Select Case" zu "betrügen", um mit dem "Like" -Operator zu arbeiten –

Antwort

2
Select Case Range("O" & i) 
    Case "University of Illinois", "UofI" 
     Select Case Range("P" & i") 
      Case "Urbana", "Chicago" 
       Range("N" & i) = "1234" 
     End Select 
End Select 

genügt das? Haben Sie nicht getestet, damit wir Sie zu einer Lösung

+0

Das ist in der Nähe. "Urbana" und "Chicago" müssen unterschiedliche Fälle sein. Das weist mich jedoch in die richtige Richtung. Wenn ich sie in einzelne Fälle aufspalte, funktioniert es. Vielen Dank. – Robby

2

Select Case Anweisung normalerweise nicht mit dem Operator Like arbeiten können. Es gibt jedoch einen Workaround.

Um die Select Case mit der Like zu arbeiten, fügen wir einen True Ausdruck hinzu.

-Code

Sub Test4() 

    Dim LastRow As Long 
    Dim i As Long 

    LastRow = Range("O" & Rows.Count).End(xlUp).Row 
    For i = 84 To LastRow 

     Dim wordStr 
     wordStr = Range("K" & i) 

     ' adding True to enter the below Case with Like 
     Select Case True 
      Case wordStr Like "B*", wordStr Like "M*", wordStr Like "D*" 
       Select Case Range("O" & i) 
        Case "University of Illinois", "UofI" 
         Range("N" & i) = "1234" 

       End Select 

      Case wordStr Like "A*" 
       Select Case Range("O" & i) 
        Case "New York University", "NYU" 
         Range("N" & i) = "5075" 

       End Select 

     End Select 
    Next i 

End Sub 
+0

Das ist ein netter Trick, obwohl ich mich in Bezug auf die Lesbarkeit ambivalent fühle. –

0

da Sie brauchen "Wort, das mit beginnt" fangen Sie diese

Sub Test4() 
    Dim LastRow As Long, i As Long 

    LastRow = Range("O" & Rows.count).End(xlUp).row 
    For i = 84 To LastRow 
     Select Case Left(Range("K" & i).Value, 1) 
      Case "B", "M", "D" 
       Select Case Range("O" & i).Value 
        Case "University of Illinois", "UofI" 
         Range("N" & i) = "1234" 
       End Select 
      Case "A" 
       Select Case Range("O" & i).Value 
        Case "New York University", "NYU" 
         Range("N" & i) = "5075" 
       End Select 
     End Select 
    Next i 
End Sub