2016-07-13 4 views
2

Я использую приведенный ниже код, чтобы покрасить ячейки в столбцах K и Z, соответствующие критериям; но он окрашивает все ячейки между K и Z. Чтобы исправить, я использую последнюю строку кода, чтобы удалить цвет в столбцах L через Y. Есть ли способ изменить строку кода, которая начинается с «Range», только для цветных ячеек K и Z, которые соответствуют критериям?Цветные несмежные ячейки, соответствующие критериям

Sub ColrCls() 
    Dim ws As Worksheet 
    Dim lRow As Long, i As Long 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     lRow = .Range("K" & .Rows.Count).End(xlUp).Row 

     For i = 2 To lRow 
      If .Cells(i, 11).Value = "Non Sen" And .Cells(i, 26).Value = "N/A" Then 
      Range(.Cells(i, 11), .Cells(i, 26)).Interior.ColorIndex = 6 
      End If 
     Next i 

     Columns("L:Y").Interior.ColorIndex = xlNone 
    End With 
End Sub 
+1

На мой взгляд, вы даже не нужно Vba. Вы пробовали условное форматирование? – cyboashu

+0

Я бы предпочел vba, потому что я буду добавлять 4 или 5 дополнительных IF-операторов. Очистка столбцов L thru Y неаккуратная, но я не знаю, как исправить строку диапазона Range. – GMalc

ответ

2

Вы с указанием Range.Parent property в вашем With ... End With statement но игнорируя его, когда это большинство important¹.

Sub ColrCls() 

    Dim ws As Worksheet 
    Dim lRow As Long, i As Long 

    Set ws = ThisWorkbook.Sheets("Sheet1") 

    With ws 
     lRow = .Range("K" & .Rows.Count).End(xlUp).Row 

     For i = 2 To lRow 
      If .Cells(i, 11).Value = "Non Sen" And .Cells(i, 26).Value = "N/A" Then 
       .Range("K" & i & ", Z" & i).Interior.ColorIndex = 6 
      Else 
       .Range("K" & i & ", Z" & i).Interior.Pattern = xlNone 
      End If 
     Next i 
    End With 
End Sub 

A Range object к Union несмежных клетки могут быть одним из следующих.

.Range("K5, Z5") 
Union(.Cells(5, "K"), .Cells(5, "Z")) 

В приведенном выше примере я объединил строку, подобную первому из этих двух примеров.


¹ См Is the . in .Range necessary when defined by .Cells? для серьезного обсуждения по этому вопросу.

+0

Кстати, вам может понадобиться 'Else' для очистки внутреннего colorindex, если K и Z не соответствуют условиям, но выполнялись при предыдущем проходе. В этом случае вы должны использовать '.Range (« K »& i &», Z »& i) .Interior.Pattern = xlNone'. – Jeeped

+0

Спасибо Jeeped, я буду тестировать ваш код завтра на работе. Я вернусь с тобой завтра с тем, что узнаю. Я также прочитаю информацию о .Range. – GMalc

+0

Я проверяю ваше исправление на некоторые данные, и он отлично работает, спасибо. – GMalc

2

Вы могли бы заменить

Range(.Cells(i, 11), .Cells(i, 26)).Interior.ColorIndex = 6 

с

.Cells(i, 11).Interior.ColorIndex = 6 
.Cells(i, 26).Interior.ColorIndex = 6 
+0

ваш вход работал нормально, я просто предпочитаю вход Jeeped. Спасибо за ввод. – GMalc

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