1

Я чрезвычайно новичок в мире VBA и нуждаюсь в некоторой помощи со стороны условного форматирования VBA.Условное форматирование VBA несколько условий

1) мне нужно условное форматирование быть применены к колонку (М)

  • зеленый под 7
  • желтые от 7-20
  • красных больше чем 20

С что если столбец (N), если он указывает NOPO, я не хочу применять условное форматирование.

Я разработал формулу использовать, что указывает на то, что цвет не требуется, но не в состоянии превратить это в VBA условное форматирование (эта формула показывает, какой цвет и если условное форматирование следует применять.

=IF(N2="osno",IF(M2<=7,"green",IF(M2<7,IF(M2>20,"red","less than 20"),IF(M2>20,IF(M2>20,"red","less than 20"),"yellow"))),"no format") 

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

Sub Conditional() 
' 
' Notification_05 Macro 
' Conditional Formatting 
' 

' 
    Sheets("Final").Select 
    Columns("M:M").Select 

    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlLess, _ 
     Formula1:="=8" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 5296274 
     .TintAndShade = 0 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlBetween, _ 
     Formula1:="=8", Formula2:="=20" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 49407 
     .TintAndShade = 0 
    End With 
    Selection.FormatConditions(1).StopIfTrue = False 
    Selection.FormatConditions.Add Type:=xlCellValue, Operator:=xlGreater, _ 
     Formula1:="=20" 
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority 
    With Selection.FormatConditions(1).Interior 
     .PatternColorIndex = xlAutomatic 
     .Color = 470000 
     .TintAndShade = 0 
    ActiveWindow.SmallScroll Down:=-27 
    Range("M2").Select 
    With Range("M:M") 
     .FormatConditions.Add Type:=xlExpression, Formula1:= _ 
      "=LEN(TRIM(M1))=0" 
     With .FormatConditions(.FormatConditions.Count) 
      .SetFirstPriority 
       End With 
        End With 
        End With 
End Sub 

Спасибо,

Bla ke

+0

Ваш '= ЕСЛИ (N2 = "осно", ЕСЛИ (М2 <= 7, "зеленый", ЕСЛИ (M2 <7,IF(M2> 20, "красный", "менее 20"), ЕСЛИ (М2> 20 , IF (M2> 20, «красный», «менее 20»), «желтый»))), «без формата») 'равнозначно' = IF (N2 = "osno", IF (M2 <= 7 , «зеленый», IF (M2> 20, «красный», «желтый»)), «нет формата») ', потому что часть' M2 <7' всегда будет оцениваться как 'False', а вторая' M2> 20', всегда будет «Истиной», если он пройдет мимо первого «M2> 20». Это не поможет вам написать его как код VBA, но это может упростить то, что вы считаете нужным сделать. – YowE3K

ответ

0

Формула CF должна возвращать либо true, либо false: вы не можете использовать одну формулу для назначения одного из нескольких цветов, только чтобы решить, следует ли применять цвет или нет. Вам понадобятся три правила, каждый из которых имеет немного другую формулу.

Sub Tester() 

    Dim rng As Range 

    Set rng = Selection 

    rng.FormatConditions.Delete 'clear any existing rules 

    AddRule rng, "=AND(M2=""osno"", N2<7)", vbGreen 
    AddRule rng, "=AND(M2=""osno"", N2>=7,N2<=20)", vbYellow 
    AddRule rng, "=AND(M2=""osno"", N2>20)", vbRed 

End Sub 

'utility sub: add a CF rule given the formula and a fill color 
Sub AddRule(rng, sFormula, lColor) 
    With Selection.FormatConditions 
     With .Add(Type:=xlExpression, Formula1:=sFormula) 
      .Interior.Color = lColor 
      .StopIfTrue = True 
     End With 
    End With 
End Sub