Excel VBA Макросы: Почему не закрашиваются ячейки при работе с процентами?

Автор StanPines, 03 декабря 2019, 18:44

StanPines

Сделал макрос, но почему-то не работает. Подскажите, где ошибка?

Макрос должен закрашивать ячейки по этому условию.
Если (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
[свернуть]