2015-10-28 5 views
1

Я хотел бы изменить цвет ячейки на основе значения соседней ячейки. Следующий код работает правильно для одной ячейки, но я хотел бы, чтобы он применялся к диапазону ячеек, в настоящее время он смотрит на значение S5 и меняет цвет T5, я бы хотел, чтобы это повторялось для ряда ячеек (Соответствие S5-S100 с T5-T100). Как я могу сделать это без необходимости делать оператор if для 100 ячеек?Изменение значения ячейки для диапазона ячеек без нескольких, если статусы

If LCase(Sheets(1).Range("S5").Value) = "yes" Then 
    Sheets(1).Range("T5").Interior.ColorIndex = 33 

ElseIf Sheets(1).Range("S5").Value <> "" Then 
    Sheets(1).Range("T5").Interior.ColorIndex = 19 

Else 
    Sheets(1).Range("T5").Interior.ColorIndex = 0 
End If 
+1

Условное форматирование? – findwindow

+0

@findwindow прав, что условное форматирование, вероятно, будет проще, чем VBA - если у вас нет других вещей VBA, в этом случае вы можете предпочесть этот метод. Короче говоря, вам нужно будет создать цикл, который создает счетчик и будет смотреть на каждую строку S, о которой вы заботитесь. –

+0

Я бы использовал условное форматирование, как указано в @fndwindow, но если вы хотите сохранить его в vba, тогда загляните в циклы 'for' для итерации по заданному диапазону. –

ответ

1

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

For i = 5 to 100 

    If LCase(Sheets(1).Range("S"&i).Value) = "yes" Then 
     Sheets(1).Range("T"&i).Interior.ColorIndex = 33 

    ElseIf Sheets(1).Range("S"&i).Value <> "" Then 
     Sheets(1).Range("T"&i).Interior.ColorIndex = 19 

    Else 
     Sheets(1).Range("T"&i).Interior.ColorIndex = 0 
    End If 
Next i 

Обратите внимание, как вместо ссылки непосредственно на «S5», а не код ссылается на Si [для любой номер я есть , начиная с 5 и переходя по строкам до 100].

0

Условное форматирование в EXCEL, вероятно, лучший способ справиться с этим:

Grade «Eh» Бэкон дал хорошее решение для этого, и это приемлемо. Вот еще одно решение, которое должно работать нормально и позволяет использовать разные решения на основе столбцов/строк, если вам нужно сделать эти действия более модульными.

Set myRange = Range("S5:S100") 

For Each cell in myRange 
    If LCase(cell.Value) = "yes" Then 
     cell.Offset(0, 1).Interior.ColorIndex = 33 
    ElseIf LCase(cell.Value) = "no" Then 
     cell.Offset(0, 1).Interior.ColorIndex = 19 
    Else 
     cell.Offset(0, 1).Interior.ColorIndex = 0 
    End If 
Next 

Range Offset Information

0

Вот интересный способ сделать это:

Const FORMULA = "CHOOSE(MMULT(--(~>{""yerz"",""""}),{1;1})+1,0,19,33)" 
With [t5:t100] 
    v = Evaluate(Replace(FORMULA, "~", .Address)) 
    For i = 1 To .Count 
     .Item(i, 2).Interior.ColorIndex = v(i, 1) 
    Next 
End With 

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

Обратите внимание, что ваши номера цветов могут быть отредактированы в конце первой строки.

Вот что происходит.

Мы используем функцию Evaluate для оценки формулы, которая принимает ваш диапазон значений T5:T100 и производит массив цветовых чисел.

Затем мы присваиваем каждому значению в массиве ColorIndex ячейки справа.

Эта сложная часть создает формулу, которая приведет к соответствующему набору номеров цветов. :)

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