Изменение из условного форматирования должно определяться из свойства DisplayFormat.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If ScanColor(Range("lockdown")) Then
MsgBox "You have an invalid cell!"
End If
End Sub
Private Function ScanColor(Cells As Range) As Boolean
Dim cell As Range
For Each cell In Cells
If cell.displayformat.Interior.ColorIndex = 3 Then
ScanColor = True
Exit For
End If
Next
End Function
Возникает вопрос о том, будет ли запущен Worksheet_Change. Вместо этого вы можете использовать Worksheet_Calculate.
У вас есть несколько вопросов. Однако я отвечу на это частично, сказав, что COUNTIF - недооцененный инструмент для ПРОВЕРКИ, если что-то существует или нет. Countif желателен, потому что он может проверять ячейки без ошибок, как это может делать VLookup или Match .
Пример для проверки, существует ли значение в диапазоне, можно написать так в Excel =OR(COUNTIF(E:E,"VNVININT2HAI"))
, который будет возвращать True
, если любая ячейка имеет значение вашего текста.
Вы также можете использовать его для проверки наличия ячейки, используя * для сторон.
Пример: =OR(COUNTIF(E6,"*2*"))
вернет True
или False
в зависимости от того, содержит ли ячейка «2» где-либо в ней.
Я сомневаюсь, что это полностью отвечает на ваш вопрос, но для людей, ищущих, как «проверить ячейки и диапазоны» COUNTIF , вероятно, более полезен, чем вы думаете. Это применимо и в VBA (иногда я предпочитаю его instr).
РЕДАКТИРОВАТЬ Это работает, но если у вас есть МНОГО ячеек для проверки, возможно, рассмотрите возможность использования IsNumber(Match()
, как показано в комментариях @scottCraner