2017-01-24 3 views
0

У меня код VBA написан для цветных ячеек на основе того, какое значение находится в другой ячейке. Можно ли сократить сокращение вниз? Я новичок в написании сценариев в VBA и надеялся, что если это можно сократить, я могу применить его к большему файлу.Excel, если утверждение сокращается?

Sub RoutingCheck() 
    Dim I As Long, r1 As Range, r2 As Range 

    For I = 2 To 456 
     Set r1 = Range("A" & I) 
     Set r2 = Range("B" & I) 

    If r1.Value = 94 And r2.Value = " " Then r1.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = "" Then r1.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = -99 Then r1.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = -66 Then r1.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = -77 Then r1.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = " " Then r2.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = "" Then r2.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = -99 Then r2.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = -66 Then r2.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value = -77 Then r2.Interior.Color = vbRed 
    If r1.Value = 94 And r2.Value <> "" And r2.Value <> -99 And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> " " Then r1.Interior.Color = vbGreen 
    If r1.Value = 94 And r2.Value <> "" And r2.Value <> -99 And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> " " Then r2.Interior.Color = vbGreen 

    If r1.Value = 1 And r2.Value = "" Then r1.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value = -66 Then r1.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value = 0 Then r1.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value = -77 Then r1.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value = "" Then r2.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value = -66 Then r2.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value = 0 Then r2.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value = -77 Then r2.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r1.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r2.Interior.Color = vbRed 
    If r1.Value = 1 And r2.Value = -99 Then r1.Interior.Color = vbGreen 
    If r1.Value = 1 And r2.Value = -99 Then r2.Interior.Color = vbGreen 

    If r1.Value = 2 And r2.Value = "" Then r1.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value = -66 Then r1.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value = 0 Then r1.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value = -77 Then r1.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value = "" Then r2.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value = -66 Then r2.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value = 0 Then r2.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value = -77 Then r2.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r1.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r2.Interior.Color = vbRed 
    If r1.Value = 2 And r2.Value = -99 Then r1.Interior.Color = vbGreen 
    If r1.Value = 2 And r2.Value = -99 Then r2.Interior.Color = vbGreen 

    If r1.Value = 3 And r2.Value = "" Then r1.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value = -66 Then r1.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value = 0 Then r1.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value = -77 Then r1.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value = "" Then r2.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value = -66 Then r2.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value = 0 Then r2.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value = -77 Then r2.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r1.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r2.Interior.Color = vbRed 
    If r1.Value = 3 And r2.Value = -99 Then r1.Interior.Color = vbGreen 
    If r1.Value = 3 And r2.Value = -99 Then r2.Interior.Color = vbGreen 

    If r1.Value = 4 And r2.Value = "" Then r1.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value = -66 Then r1.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value = 0 Then r1.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value = -77 Then r1.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value = "" Then r2.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value = -66 Then r2.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value = 0 Then r2.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value = -77 Then r2.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r1.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r2.Interior.Color = vbRed 
    If r1.Value = 4 And r2.Value = -99 Then r1.Interior.Color = vbGreen 
    If r1.Value = 4 And r2.Value = -99 Then r2.Interior.Color = vbGreen 

    If r1.Value = 5 And r2.Value = "" Then r1.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value = -66 Then r1.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value = 0 Then r1.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value = -77 Then r1.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value = "" Then r2.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value = -66 Then r2.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value = 0 Then r2.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value = -77 Then r2.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r1.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r2.Interior.Color = vbRed 
    If r1.Value = 5 And r2.Value = -99 Then r1.Interior.Color = vbGreen 
    If r1.Value = 5 And r2.Value = -99 Then r2.Interior.Color = vbGreen 

    If r1.Value = 6 And r2.Value = "" Then r1.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value = -66 Then r1.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value = 0 Then r1.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value = -77 Then r1.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value = "" Then r2.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value = -66 Then r2.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value = 0 Then r2.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value = -77 Then r2.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r1.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r2.Interior.Color = vbRed 
    If r1.Value = 6 And r2.Value = -99 Then r1.Interior.Color = vbGreen 
    If r1.Value = 6 And r2.Value = -99 Then r2.Interior.Color = vbGreen 

    If r1.Value = 7 And r2.Value = "" Then r1.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value = -66 Then r1.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value = 0 Then r1.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value = -77 Then r1.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value = "" Then r2.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value = -66 Then r2.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value = 0 Then r2.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value = -77 Then r2.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r1.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value <> "" And r2.Value <> -66 And r2.Value <> -77 And r2.Value <> 0 And r2.Value <> -99 Then r2.Interior.Color = vbRed 
    If r1.Value = 7 And r2.Value = -99 Then r1.Interior.Color = vbGreen 
    If r1.Value = 7 And r2.Value = -99 Then r2.Interior.Color = vbGreen 

     Next I 
     'Error 

     End Sub 
+1

Есть, конечно, ярлыки, которые вы можете применить здесь. Вы можете изучить использование команды 'CASE' и изучить вложенность. – CLR

ответ

2

Принимая первый блок, вы можете сделать что-то вроде этого:

If r1.Value = 94 Then 
    Select case r2.Value 
     case " ", "", -99, -66, -77 
     r1.Interior.Color = vbRed 
     r2.Interior.Color = vbRed 
     Case else 
     r1.Interior.Color = vbGreen 
     r2.Interior.Color = vbGreen 
    End Select 
ElseIf r1.value = 1 then 
    ' repeat the select case or use a function to return the correct colour. 
' repeat 
End If 

Ваши другие блоки появляются в основном только заботиться, если r2 -99, и в этом случае использовать зеленый цвет, в противном случае красный.

+0

Хороший ответ, также есть несколько хороших указателей здесь: http://www.excelitems.com/2010/12/optimize-vba-code-for-faster-macros.html –

+0

Почему бы не использовать вложенный 'Select Case'? – R3uK

+2

Никакой конкретной причины, кроме демонстрации того, что вам не нужно повторять тест If для одного и того же значения в каждой строке. Мне также кажется, что это более читаемо, но это только мои предпочтения. – Rory

Смежные вопросы