2011-01-30 14 views
1

Если следующие условия:Как выделить строку, если выполнены три условия?

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

  • Ячейка в колонке А не является пустым
  • ячейки в столбце B не является пустой
  • ячейка в столбце O пуст

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

Пример:

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

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

Спасибо!

+2

Вы попробовали что-то самостоятельно или это задача, которую вы просто даете сообществу решить? – dwo

+0

Я попытался условное форматирование. Понял, что это не сработает. Нужен код VBA. – Pat767

ответ

1

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

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

+0

Нет. A1 - ячейка, которую нужно выделить, если три условия выполнены на любой из 100 строк (A10: O110) – Pat767

1

Это будет делать основные моменты, основанные на условиях, указанных вами. Когда вы запустите его, он остановится в первой строке, в которой вы должны ввести что-то в столбце O. Если вы хотите, чтобы он продолжал работать до строки 101 и выделял все строки, затем удалите команду «Выход из 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 

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

Счастливое кодирование.

+0

Кажется, что нужно работать, но только если я запустил макрос. Мне понадобится это, чтобы постоянно «обнюхивать» для пустых ячеек и автоматически отклоняться, когда заполняется столбец 15. – Pat767

+0

Только что отредактировал решение: обработчик событий сделает все, что вам нужно. – frenchie

+0

Хорошо, все еще есть проблемы с этим. Мне нужно быть более ясным. Для каждой данной строки (от 11 до 110) мне нужно заполнить столбцы A, B, C и любое из следующих значений от E до N. После заполнения этих четырех ячеек ячейка, которую нужно выделить, находится в строке 10 (всегда) но соответствует столбцу (от E до N).Наконец, когда столбец O заполняется для данной строки, подсвеченная ячейка в строке 10 возвращается к нормальной. Например, я заполняю: A22, B22, C22 и J22. В этом случае J10 подсвечивается ... потому что я выбрал столбец J. После этого J10 возвращается в нормальное состояние при заполнении O22. То же самое относится ко всем строкам 11-110. – Pat767

1

OK - Я неправильно понял, что вы хотели. Вот вам 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 
+0

Я бы написал это как: 'If Not IsEmpty (varAB (j, 1)) Then: If Not IsEmpty (varAB (j, 2)) Then: If IsEmpty (varO (j, 1)) Тогда 'потому что нет смысла в проверке столбца B, если столбец A пуст. – JimmyPena

Смежные вопросы