Функция VBA Greater Than на самом деле показывает меньше ответов - PullRequest
2 голосов
/ 18 марта 2019

Я пытаюсь написать фрагмент кода, чтобы Excel мог проходить по строкам данных и автоматически выделять те строки, которые необходимо выделить.

Копия моих данных

Ячейки 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%", он выделяет строку.

Iискал в Интернете, но я не могу найти ничего, что помогло.Я играл с оператором, но не могу заставить его работать правильно.Обычно я нахожу ответ, который мне нужен, в StackOverflow, прежде чем мне когда-либо приходилось задавать вопрос, но я просто не нашел ничего, что бы решало проблему последовательно во всем наборе данных.

1 Ответ

1 голос
/ 18 марта 2019

Строки не являются числами. При сравнении строк "100" < "99" имеет значение true, потому что это алфавитный порядок, а не числовой, а 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...

и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...