在Excel中未正确格式化的百分比值

时间:2016-11-04 11:14:36

标签: excel vba excel-vba

我有一个非常小的百分比值列表(0.000%格式),这表示路由器的错误百分比。我想根据单元格上的数量格式化单元格颜色。如果金额大于0.050%则应为红色,如果金额大于0.005%则为琥珀色,其他一切均为绿色

这是我写的代码:

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%并且是琥珀色的细胞应该是鲜红色的!

2 个答案:

答案 0 :(得分:3)

存储的值不是百分比。它是十进制等值,意味着您必须将小数点向左移动两个位置。因此,要比较0.05%,您必须使用0.0005

答案 1 :(得分: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

我刚认识到保罗纠正了你的问题后......