2017-02-05 2 views
-1

мне нужно поиграться с указанием даты уикэнда и окрасить значение в Col M:мест в выходные дни и цвет в УВЕ

  1. мне нужно проверить на «выходные даты» в Col K листа «Латентность "(начиная со строки 2)

  2. Если найдена дата выходного дня, проверьте в колонке Col O для текста« fail ». Если обнаруживается,

  3. Проверка на любой из этих трех текста «Переехал в SA (сокращения Compatibility)» или «Текст 2» или «Текст 3» в Col P.

  4. Если какая-либо из этих текста и если число в Col M равно> 1, то покрасьте его красным цветом.

У меня есть нижестоящий код, который проверяется только на воскресенье. Но я хочу, чтобы это работало на выходные и добавляло дополнительные ключевые слова для проверки.

Sub SundayCheck() 

Dim r, LastRow, RemainingDay As Double 

LastRow = Range("M:O").Cells(Rows.count, "A").End(xlUp).Row 

Application.ScreenUpdating = False 

    For r = 2 To LastRow 
     RemainingDay = 0 

     If Weekday(Range("K" & r).Value, vbSunday) = 1 Then 
       RemainingDay = Round((24 - Format(TimeValue(Range("K" & r)), "h"))/24, 1) 

      If InStr(1, Range("O" & r).Text, "Fail", vbTextCompare) > 0 Then 

       If Range("M" & r) - RemainingDay >= 1 Then 
        Range("M" & r).Cells.Font.ColorIndex = 3 
       Else 
        Range("M" & r).Cells.Font.ColorIndex = 0 
       End If 

      End If 
     End If 
    Next r 
    End Sub 
+0

вы говорите 1) _ "проверить в Col O для текст «fail» «_, но ваш код проверяет« pass »2) _« если число в Col M равно> 1 »_, но ваш код проверяет« Range («M» & r) - RemainingDay> = 1' ... – user3598756

+0

Я отредактировал пункт 1. Да, чтобы проверить оставшиеся часы. Я хочу удалить это и добавить условия, о которых я упомянул в OP –

ответ

0

с минимальным редактированием кода

Option Explicit 

Sub SundayCheck() 
    Dim r As Long, LastRow As Long 

    LastRow = Cells(Rows.Count, "A").End(xlUp).row 
    Application.ScreenUpdating = False 
    For r = 2 To LastRow 
     If Weekday(Range("K" & r).Value, vbSunday) = 1 Or Weekday(Range("K" & r).Value, vbSunday) = 7 Then 
      If UCase(Range("O" & r).Text) = "FAIL" Then 
       Select Case True 
        Case InStr(Range("P" & r).Text, "Moved to SA (Compatibility Reduction)") > 0, _ 
         InStr(Range("P" & r).Text, "Text2") > 0, _ 
         InStr(Range("P" & r).Text, "Text3") > 0 
         If Range("M" & r) > 1 Then 
          Range("M" & r).Cells.Font.ColorIndex = 3 
         Else 
          Range("M" & r).Cells.Font.ColorIndex = 0 
         End If 
       End Select 
      End If 
     End If 
    Next r 
End Sub 

Где я принял ваше состояние 3, как полное совпадение вместо частичного одного

+0

Спасибо за редактирование. Но для условия 3 мне нужно частичное совпадение ... либо один из них должен совпадать, а не все три. –

+0

как код теперь проверяет один из трех текстов. «полное» совпадение, о котором я писал, относится к одной строке, например: «Text2» будет соответствовать, а «abText2» - нет. BTW Я отредактировал код и изменил «fail» на «Moved to SA (сокращение совместимости)» в «Case» check – user3598756

+0

Я не знаю, что я делаю неправильно Но я не получаю результат. Мой Col O не работает, а Col M имеет «1.2», а Col P имеет текст «Перемещено в SA (Уменьшение совместимости)». Но «1.2» не окрашивается. –