Сделал макрос, но почему-то не работает. Подскажите, где ошибка?
Макрос должен закрашивать ячейки по этому условию.
Если (H3 - L3) >= 2 - залить ячейку H3 зелёным, а если (L3 - H3) >= 2 - залить красным.
По такому принципу пройтись по всем строкам.
Макрос
Sub paint()
Dim LastRow As Long, total As Single
LastRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
For c = 8 To 12
For r = 2 To LastRow
total = Cells(r, 12)
If total - Cells(r, c)e > 2 Then
Cells(r, c).Interior.Color = vbRed
ElseIf Cells(r, c) - total > 2 Then
Cells(r, c).Interior.Color = vbGreen
End If
Next
Next
End Sub
[вложение удалено администратором]
Проблема в том, что юзер на мониторе в экселе видит 9,67%, а внутри экселя это 0,0967. Это можно увидеть и юзеру, если в ячейке сделать формат "Общий".
Если от 0,0967 отнять 0,0331, то не будет числа, большего 2.
Поэтому нужно сравнивать не с 2, а нужно разделить 2 на 100 и нужно сравнивать с 0,02.
Макрос
Sub paint()
Dim total As Double
Dim lr As Long, r As Long, c As Long
' Отключение монитора, чтобы ускорить макрос.
Application.ScreenUpdating = False
lr = Cells(Rows.Count, 1).End(xlUp).Row
For r = 2 To lr
' Если это итоговая строка.
If Cells(r, "A").Interior.Color = 65535 Then
GoTo СледСтрока
End If
total = Cells(r, 12)
For c = 8 To 11
If Cells(r, c) - total >= 0.02 Then
Cells(r, c).Interior.Color = vbGreen
ElseIf total - Cells(r, c) >= 0.02 Then
Cells(r, c).Interior.Color = vbRed
End If
Next c
СледСтрока:
Next r
' Включение монитора и сообщение.
Application.ScreenUpdating = True
MsgBox "Готово.", vbInformation
End Sub