Страницы: 1
RSS
Изменение цвета ячеек в столбце отвечающих условию с помощью макроса, не условное форматирование
 
День добрый.(надеюсь тему назвал правильно)
Необходим макрос, при выполнение которого происходило изменение цвета ячеек в столбце(B), если значение ячейки > 10,
и ещё один макрос, если значение > 20, но < 50 (применение или этого, или этого, в зависимости от условий)

A                                   B
Маршрут 1                   5
Маршрут 2                   15
Маршрут 3                  10
Маршрут 4                   9
Маршрут 5                   7
Маршрут 6                   22
Искал в инете, нашёл подобный макрос:
Код
 Sub Macro22()
With Columns("b:b").FormatConditions
     .Add xlCellValue, xlBetween, "10", "100"
     .Item(1).Interior.ColorIndex = 45
 End With
End Sub

Но как я понял, это то же условное форматирование, и оно к сожалению не подходит
Изменено: koreras - 07.03.2018 13:59:30
 
Код
Private Sub WorkSheet_Change(ByVal Target As Range)
Dim qq As Range, lRow&, aa As Range
lRow = ActiveSheet.UsedRange.Rows.Count + 1
Set qq = Range("B2:B" & lRow)
If Not Intersect(qq, Target) Is Nothing Then
  For Each aa In qq
    With aa.Interior
      Select Case aa.Value
        Case 21 To 49: .Color = vbGreen
        Case Is > 10: .Color = vbRed
        Case Else: .ColorIndex = 0
      End Select
    End With
  Next
End If
End Sub
Изменено: Anchoret - 07.03.2018 10:59:51
 
Забыл уточнить, данные время от времени будут меняться.
Макрос предложенный Anchoret не реагирует на изменение ячеек
 
Цитата
koreras написал:
если значение ячейки > 10, и если значение > 20, но < 50
А это не то же, что >10, но < 50?
Чем шире угол зрения, тем он тупее.
 
Изменил задачу, макрос нужен и >10, и >20<50, (отдельно)
будет применяться один из них, в зависимости от условий.
 
Если я правильно понял, то в модуль нужного листа поместите код:
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim f As Long, q As Range: Application.ScreenUpdating = False
    If Intersect(Target, [B:B]) Is Nothing Then Exit Sub
    [B:B].Interior.ColorIndex = xlNone
    If [условие_1] Then f = 1
    If [условие_2] Then f = 2
    For Each q In Intersect(ActiveSheet.UsedRange, [B:B])
        Select Case f
        Case 1
            If q > 10 Then q.Interior.ColorIndex = 3
        Case 2
            If q > 20 And q < 50 Then q.Interior.ColorIndex = 6
        End Select
    Next
End Sub
Где вместо [условие_1] и [условие_2] пропишите требуемые условия в приоритетном порядке.
Изменено: SAS888 - 07.03.2018 08:34:40
Чем шире угол зрения, тем он тупее.
 
Как понять в приоритетном порядке?
Или если сразу в лоб, то как прописать?
 
Прикрепите небольшой файл-пример и укажите условия, по которым требуется окрашивать те или другие ячейки.
Изменено: SAS888 - 07.03.2018 10:09:52
Чем шире угол зрения, тем он тупее.
 
Файл прикрепил(пример), необходимы 2  макроса(отдельных друг от друга)
1 макрос, при котором, ячейки столбце B значения  которых > 10 ,будут окрашиваться в красный(цвет не важен)
2 макрос, при котором, ячейки столбце B значения  которых > 20<50 ,будут окрашиваться в зелёный(цвет не важен).
Так же, учитывать то, что в данные в файле будут меняться путём копирования/переноса строк из другого файла(не меняться в ручную, а именно копироваться)
Так что условное форматирование не подходит.
 
Изменил код в посте #2, проверяйте.
 
Задача поставлена не корректно.
С одной стороны:
Цитата
koreras написал:
1 макрос, при котором, ячейки столбце B значения  которых > 10 ,будут окрашиваться в красный(цвет не важен)
2 макрос, при котором, ячейки столбце B значения  которых > 20<50 ,будут окрашиваться в зелёный(цвет не важен).
С другой:
Цитата
koreras написал:
будет применяться один из них, в зависимости от условий.
А это уже не два разных макроса, а один. Т.е. для того, чтобы ячейки окрашивались по событию изменения значений, нужно знать эти самые условия, в зависимости от которых макрос должен выбрать, какое из сравнений (> 10, или > 20 и < 50) применять.
Проясните ситуацию...
И еще: нужно ли, при очередном изменении значений в столбце "B", перед новым окрашиванием, обесцвечивать ранее окрашенные ячейки?
Изменено: SAS888 - 08.03.2018 07:11:05
Чем шире угол зрения, тем он тупее.
 
Добрый день.
Отвечаю уважаемому SAS888.
Необходимо 2 макроса, не два условия в одном, а два раздельных. 1 где просто >10, 2 где >20 и <50.
Какой из них будет применяться уже будет решаться по факту(по условиям, или этот, или этот).
Обесцвечивание, здесь вам +, не думал про это. предполагалось, что при изменении данных(копирование-вставка), в изначальном варианте заливки нет, и уже при вставке, заливка заливается по условиям макроса.
 
Благодарю уважаемого  Anchoret.
Всю работает.
Страницы: 1
Наверх