VBA大于功能实际上显示的结果少于答案

时间:2019-03-18 18:06:40

标签: excel

我正在尝试编写一段代码,以允许Excel在数据行中运行并自动突出显示需要突出显示的那些行。

Copy of my data

单元格G,H和I都是公式。 G10等于C10 / B10,H10等于D10 / B10,而I10等于E10 / B10。

Sub HighlightRows()

On Error Resume Next

Range("A10").Select
Range(Selection, Selection.End(xlDown)).Select
rowcount = Selection.Rows.Count
Range("A10").Select



For mycounter = 1 To rowcount

    Ret1 = FormatPercent(ActiveCell.Offset(0, 6).Value, 2, vbTrue)
    Ret2 = FormatPercent(ActiveCell.Offset(0, 7).Value, 2, vbTrue)
    Ret3 = FormatPercent(ActiveCell.Offset(0, 8).Value, 2, vbTrue)

    If ActiveCell.Offset(0, 6).Value = "#DIV/0!" Then
        ActiveCell.Offset(1, 0).Select

    ElseIf Ret1 >= "0.50%" Then

        Selection.EntireRow.Interior.Color = 65535
        ActiveCell.Offset(1, 0).Select

    ElseIf Ret2 >= "3.00%" Then

        Selection.EntireRow.Interior.Color = 65535
        ActiveCell.Offset(1, 0).Select

    ElseIf Ret3 > "15.00" Then

        Selection.EntireRow.Interior.Color = 65535
        ActiveCell.Offset(1, 0).Select


    ElseIf Ret3 = "15.00%" Then

        Selection.EntireRow.Interior.Color = 65535
        ActiveCell.Offset(1, 0).Select

    Else

        ActiveCell.Offset(1, 0).Select


    End If


Next

End Sub

这是我为此特定模块提供的所有代码。我分解了Ret1,Ret2和Ret3,因为我需要找出其中哪一个引起了麻烦。

当前,我的问题是ElseIF Ret3>“ 15.00%”。如果您查看我的数据单元的图片,那么问题就出在I13。

当我在VBA中运行代码时,它显示Ret3为“ 4.21%”,但是当它到达Ret3>“ 15.00%”的代码行时,它将突出显示该行。

我已经在线搜索过,但找不到任何有用的信息。我已经和操作员一起玩了,但是我无法使其正常工作。通常,在我不得不问一个问题之前,我会在StackOverflow上找到我需要的答案,但是我还没有发现任何可以在整个数据集中一致地解决该问题的东西。

1 个答案:

答案 0 :(得分:1)

字符串不是数字。比较字符串"100" < "99"是正确的,因为它是字母顺序而不是数字顺序,并且1在9之前。

因此,与其在比较之前将所有数字都转换为字符串,不如将所有字符串转换为数字会更好。


Option Explicit

Sub HighlightRows()

    On Error Resume Next

    Range("A10").Select
    Range(Selection, Selection.End(xlDown)).Select
    rowcount = Selection.Rows.Count
    Range("A10").Select



    For mycounter = 1 To rowcount

        Dim Ret1 Double
        Dim Ret2 Double
        Dim Ret3 Double
        Ret1 = CDbl(ActiveCell.Offset(0, 6).Value)
        Ret2 = CDbl(ActiveCell.Offset(0, 7).Value)
        Ret3 = CDbl(ActiveCell.Offset(0, 8).Value)

        If ActiveCell.Offset(0, 6).Value = "#DIV/0!" Then
            ActiveCell.Offset(1, 0).Select

        ElseIf Ret1 >= 0.005 Then

            ' and so on...

以此类推。