2016-12-14 3 views
1

Код ниже представляет собой отрывок из моего полного Sub только потому, что здесь будет легче читать. Мне нужно добавить больше критериев для некоторых случаев, и я не уверен, как это реализовать.Excel - выберите случай с несколькими критериями

Чтобы подвести итог тому, что это делает, в строке, если столбец K имеет слово, которое начинается с B, M или D, он запускает множество случаев. Если столбец K имеет слово, которое начинается с буквы A, он запускает другой набор случаев. Опять же, это работает. Но в некоторых из этих случаев мне нужно, чтобы у него было больше критериев, а не только на колонку О.

Например, в первом случае необходимо проверить «Университет Иллинойса» и «UofI», но ему также необходимо проверить столбец P для значений «Урбана» и «Чикаго». Как я могу это сделать?

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

Вы могли бы, возможно, превратить ваш выберите заявления случае округлить 'Select Case True', а затем ваш первый случай может быть «Range» («O» & i) = «Университет штата Иллинойс» и Range («P» & i) = «Urbana» '(но тогда, возможно, вы также можете использовать' If '). – SJR

+0

Если условия для различных случаев связаны с несколькими критериями, основанными на нескольких значениях, почему бы просто не использовать каскад 'If-Then-ElseIf ...', а не 'Select Case'? Это позволяет использовать булевы операторы в условиях. –

+0

@Robby попробуйте код в моем обходном ответе ниже, есть способ «Обмануть» 'Select Case' для работы с оператором' Like' –

ответ

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 

хватает ли это? Не тестировали, пожалуйста, обращайтесь к нам, чтобы мы могли получить решение.

+0

. Это близко. «Урбана» и «Чикаго» должны быть разными. Тем не менее, это указывает на меня в правильном направлении. Если я разделяю их на отдельные случаи, он работает. Благодарю. – Robby

2

В нормальных условиях оператор Select Case не работает с оператором Like. Тем не менее, есть обход.

Для того, чтобы Select Case работал с Like, мы добавим выражение True.

Код

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

Это аккуратный трюк, хотя я чувствую себя двусмысленным в плане удобочитаемости. –

0

так как вам нужно, чтобы поймать «слово, которое начинается с» вы могли бы пойти, как этот

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