Цвет ячейки на основе значения в ячейке - PullRequest
1 голос
/ 26 ноября 2008

Используя макрос, я объединил информацию из нескольких рабочих книг в один лист в новой рабочей книге.

В одном столбце я создал именованный диапазон с именем ColRange. Этот столбец имеет номера от -350 до 500.

Как изменить цвет ячеек в зависимости от значения текста в ячейке.
красный (0-500) желтый (-5-0) зеленый (-350--5)

Ответы [ 3 ]

3 голосов
/ 26 ноября 2008

Посмотрите на условное форматирование . Возможно, вам даже не понадобится VBA для этого.

При этом код VBA будет выглядеть примерно так:

Public Sub colorit()
    Dim colRange As Range
    Dim rowNum As Integer
    Dim rnum As Integer

    rnum = 20
    Set colRange = Range(Cells(2, 9), Cells(rnum, 9))

    For rowNum = 1 To colRange.Rows.Count
        If colRange.Cells(rowNum, 1).Value <= -5 Then
            colRange.Cells(rowNum, 1).Interior.Color = RGB(0, 255, 0)
        ElseIf colRange.Cells(rowNum, 1).Value <= 0 Then
            colRange.Cells(rowNum, 1).Interior.Color = RGB(255, 255, 0)
        ElseIf colRange.Cells(rowNum, 1).Value <= 500 Then
            colRange.Cells(rowNum, 1).Interior.Color = RGB(255, 0, 0)
        End If
    Next rowNum
End Sub
0 голосов
/ 09 декабря 2008

Это ответ на оригинальный вопрос, это простая модификация ответа Винсента:

Если это именованный диапазон (с помощью пользовательского интерфейса: Вставить, Имя, Определить):

Dim c As Range

For Each c In Range("ColRange").Cells
    If c.Value >= 0 And c.Value <= 500 Then
        c.Interior.Color = RGB(255, 0, 0)
    ElseIf c.Value >= -5 Then
        c.Interior.Color = RGB(255, 255, 200)
    Else
        c.Interior.Color = RGB(0, 255, 0)
    End If

Next c

Если это объект диапазона, определенный в коде:

Dim c as Range

For Each c In colRange.Cells

    If c.Value >= 0 And c.Value <= 500 Then
        c.Interior.Color = RGB(255, 0, 0)
    ElseIf c.Value >= -5 Then
        c.Interior.Color = RGB(255, 255, 200)
    Else
        c.Interior.Color = RGB(0, 255, 0)
    End If

Next c

Я думаю, что ответ Винсента не совсем сработает, потому что он пытается воздействовать на весь диапазон ColRange, внутри If Then, вместо того, чтобы воздействовать на каждую ячейку по одному. (По этой причине вы можете также обернуть его с помощью Application.ScreenUpdating = False

0 голосов
/ 26 ноября 2008

Предположим, что значение - это число, хранящееся в столбце:

If value >= 0 AND value <= 500 Then
    ColRange.Interior.Color = RGB(255,0,0)
ElseIf  value >= -5 Then
    ColRange.Interior.Color = RGB(255,255,200)
Else
    ColRange.Interior.Color = RGB(0,255,0)
End If

И при условии, что значения больше 500 или меньше -350 либо невозможны, либо проверены вашим сценарием. Кроме того, ваши диапазоны немного перекрываются, какого цвета должен быть 0? Красный или Желтый?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...