我有一个非常小的百分比值列表(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%并且是琥珀色的细胞应该是鲜红色的!
答案 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
我刚认识到保罗纠正了你的问题后......