Как выделить строку, если выполнены три условия? - PullRequest
1 голос
/ 30 января 2011

Если выполнены следующие условия:

Для любой данной строки между строкой 10 и строкой 100 включительно:

  • Ячейка в столбце A не пуста
  • Ячейка в столбце B не пуста
  • Ячейка в столбце O пуста

Я бы хотел выделить конкретную ячейку (скажем, A1).* Пример:

Я заполняю A10 и E10, оставляя O10 пустым, затем ячейка A1 подсвечивается.Если я затем заполню ячейку O10, выделение в ячейке A1 исчезнет.

Я могу перейти к следующему ряду.Любая строка в любое время должна генерировать эти действия.

Спасибо!

Ответы [ 3 ]

1 голос
/ 31 января 2011

Это будет делать основные моменты в зависимости от указанных вами условий. Когда вы запустите его, он остановится на первой строке, в которой вам нужно что-то ввести в столбце O. Если вы хотите, чтобы он продолжал работать до строки 101 и выделил все строки, то удалите, а затем команду Exit Do, которая находится между 2 End If заявления.

Sub Highlight()

    Dim TheRow As Integer

    TheRow = 9

    Application.ScreenUpdating = False 'This hides the visual process and speeds up
                                        'the execution

    Do

        TheRow = TheRow + 1

        If TheRow = 101 Then Exit Do

        Cells(TheRow, 1).Select
        Selection.Interior.Pattern = 0

        Cells(TheRow, 2).Select
        Selection.Interior.Pattern = 0

        If Not Cells(TheRow, 1).Value = "" And Not Cells(TheRow, 2).Value = "" And Cells(TheRow, 15).Value = "" Then

            If Cells(TheRow, 1).Value = "" Then
                Cells(TheRow, 1).Select
                Selection.Interior.Color = 656
            End If

             If Cells(TheRow, 2).Value = "" Then
                Cells(TheRow, 2).Select
                Selection.Interior.Color = 656
            End If

            Exit Do  'this is the line to remove if you want to highlight all cells

        End If

    Loop

    Application.ScreenUpdating = True

End Sub

А затем создайте обработчик событий, который срабатывает при изменении ячейки в столбце 15. Поместите следующий код в модуль фактической рабочей таблицы (в проводнике проекта VBA дважды щелкните по листу, для которого вы хотите эту функцию; не помещайте его в другой модуль!)

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 15 Then
        If Target.Row > 9 And Target.Row < 101 Then Call Highlight
End Sub

Дайте мне знать, если это решение работает, и не забудьте нажать «принять решение» и проголосовать за него!

Удачного кодирования.

1 голос
/ 31 января 2011

ОК - я неправильно понял, что вы хотели. Вот VBA UDF для проверки. Введите =Checker($A$10:$B$100,$O$10:$O$100) в ячейку A1, затем используйте условное форматирование в ячейке A1, которое срабатывает, когда оно становится True.

Public Function Checker(theRangeAB As Range, theRangeO As Variant) As Boolean
    Dim varAB As Variant
    Dim varO As Variant
    Dim j As Long

    varAB = theRangeAB.Value2
    varO = theRangeO.Value2

    Checker = False
    For j = 1 To UBound(varAB)
        If Not IsEmpty(varAB(j, 1)) And Not IsEmpty(varAB(j, 2)) Then
            If IsEmpty(varO(j, 1)) Then
                Checker = True
                Exit For
            End If
        End If
    Next j

End Function
1 голос
/ 30 января 2011

Вам не нужен VBA: просто используйте условное форматирование в ячейке A10 по следующей формуле:

=AND(NOT(ISBLANK($A10)),NOT(ISBLANK($B10)),ISBLANK($O10))

...