Условное форматирование VBA в зависимости от типа метри c - PullRequest
0 голосов
/ 17 марта 2020

Я пытался создать код VBA, который будет автоматически применять правильное условное форматирование для результатов индикаторов, в зависимости от того, будут они восходящими или убывающими. Пытался использовать vlookup для поиска кода индикатора в таблице и выходного значения = По убыванию / По возрастанию и назначать только этому индикатору правильное условное форматирование, а не весь столбец.

Так что, если мы ищем ячейку E2 в таблице Sheets (" Формулы "). Диапазон (A: N), и мы находим его со значением Descending, и поскольку" result "не равен ascdes, то я бы хотел создать код условного форматирования для нисходящего индикатора в ячейке $ AA $ 2. Это должно произойти для всех индикаторов из диапазона.

Мне удалось создать только приведенный ниже код, который создает условное форматирование по убыванию, но для всех ячеек в столбце AA, а не только AA2.

Индикаторы смешаны, поэтому установка вручную CF займет много времени, и если кто-то будет сортировать индикаторы AZ и сохранять, ему придется запускать только макрос, который будет фиксировать CF, вместо того, чтобы обратить вспять изменения сортировки.

Sub ConditionalFormatting()

Dim code As Range 'searched values
Dim ascdes As String 'variable that indicates values are ascending or descending
Dim table As Range 'table where we check if code is ascending or descending
Dim cond1 As FormatCondition, cond2 As FormatCondition, cond3 As FormatCondition
Dim rg As Range
Dim result As String

Set rg = Range("$AA$2:$AA$300")

'clear any existing conditional formatting
rg.FormatConditions.Delete

'vlookup conditions
Set code = Range("E2")
Set table = Sheets("Formulas").Range("A:N")

'holds value ascendat for comparison purposes
rosmal = Sheets("Formulas").Range("O2")

result= Application.VLookup(code, table, 14, 0)

If result = ascdes Then

'define the rule for each conditional format
Set cond1 = rg.FormatConditions.Add(xlCellValue, xlGreaterEqual, "=$Q2") 'Green
Set cond2 = rg.FormatConditions.Add(xlCellValue, xlBetween, "=$O2", "=$P2") 'Amber
Set cond3 = rg.FormatConditions.Add(xlCellValue, xlLessEqual, "=$N2") 'Red

'define the format applied for each conditional format
With cond1
.Interior.Color = RGB(0, 176, 80) 'vbGreen
.Font.Color = vbBlack
End With

With cond2
.Interior.Color = RGB(255, 204, 0) 'vbYellow
.Font.Color = vbBlack
End With

With cond3
.Interior.Color = RGB(255, 0, 0) 'vbRed
.Font.Color = vbBlack
End With

Else

    'define the rule for each conditional format
Set cond1 = rg.FormatConditions.Add(xlCellValue, xlGreaterEqual, "=$N2") 'Red
Set cond2 = rg.FormatConditions.Add(xlCellValue, xlBetween, "=$O2", "=$P2") 'Amber
Set cond3 = rg.FormatConditions.Add(xlCellValue, xlLessEqual, "=$Q2") 'Amber

'define the format applied for each conditional format
With cond1
.Interior.Color = RGB(0, 176, 80) 'vbGreen
.Font.Color = vbBlack
End With

With cond2
.Interior.Color = RGB(255, 204, 0) 'vbYellow
.Font.Color = vbBlack
End With

With cond3
.Interior.Color = RGB(255, 0, 0) 'vbRed
.Font.Color = vbBlack
End With

End If

End Sub

Почти забытая используемая версия excel 2013 года и не может устанавливать внешние дополнения.

Спасибо,

1 Ответ

0 голосов
/ 18 марта 2020

Мне удалось решить эту проблему с помощью создания переменной и использования ее в ячейках для перемещения по электронной таблице. Также добавлено do в то время как l oop, которое увеличивает допустимое значение, пока не достигнет определенного значения.

...