2016-11-04 4 views
1

У меня есть список процентных значений, которые очень малы (формат 0.000%), что представляет собой процент ошибок в маршрутизаторах. Я хочу форматировать цвет ячейки в зависимости от количества в ячейке. если сумма больше, чем 0,050% он должен быть красным, если он больше, чем 0,005% янтарный, все остальное зеленыйЗначения в процентах, неверно отформатированные в Excel

вот код, который я написал:

With .Cells(i, 8) 
     If .NumberFormat <> "0.000%" Then 
      .NumberFormat = "0.000%" 
      If .Value2 <> vbNullString And IsNumeric(.Value2) Then .Value = .Value/100 
       If .Value2 = vbNullString Then 
        .Value = "---" 
        .HorizontalAlignment = xlRight 
       End If 
     Else 
      .Value = 0 
     End If 

     If .Value > 0.05 Then 
      .Interior.Color = RGB(237, 67, 55) '<-- Red color 
      .Font.Color = vbWhite 

      ElseIf .Value > 0.005 Then 
       .Interior.Color = RGB(255, 190, 0) '<-- Amber Colour 
       .Font.Color = vbWhite 

      Else 
       .Interior.Color = RGB(50, 205, 50) '<-- Green color 
       .Font.Color = vbWhite 
     End If 
    End With 

но цвет формат не является точным, вот список некоторых из результатов:

0.034% <---green 
0.845% <---amber 
0.007% <---green 
0.005% <---green 
0.094% <---green 

это не должно быть так как клетка, которая содержит 0,845% и является янтарь должен быть ярко-красным!

ответ

3

Сохраненное значение не является процентом. Это десятичный эквивалент, то есть вы должны сдвинуть десятичную точку на два места влево. Поэтому для сравнения 0.05% вы должны использовать 0.0005.

+0

@PaulOgilive я попробовал, что вчера и это не сработало, но я просто попробовал снова сегодня, и это произошло! приветственный чувак! –

0

Это должно очистить код для вас, чтобы сделать это немного быстрее, тоже:

Sub Test() 
Dim Cel As Range, Rng As Range 

Set Rng = Range("H1:H" & Range("H1048576").End(xlUp).Row).SpecialCells(xlCellTypeConstants) 

For Each Cel In Rng 
    If Trim(Cel.Value) = "" Then Cel.Value = "---": Cel.HorizontalAlignment = xlRight 
    If IsNumeric(Cel.Value) Then 
     Cel.Value = Cel.Value/100 
     If Cel.Value > 0.0005 Then 
      Cel.Interior.Color = RGB(237, 67, 55): Cel.Font.Color = vbWhite 
       ElseIf Cel.Value > 0.00005 Then 
        Cel.Interior.Color = RGB(255, 190, 0): Cel.Font.Color = vbWhite 
        Else: Cel.Interior.Color = RGB(50, 205, 50): Cel.Font.Color = vbWhite 
     End If 
    End If 
Next 

With Range("H1:H" & Range("H1048576").End(xlUp).Row).SpecialCells(xlCellTypeBlanks) 
    .Value = "---" 
    .HorizontalAlignment = xlRight 
End With 

End Sub 

Я только после реализации Пол поправил свой вопрос ....

Смежные вопросы