Excel VBA Макросы: Проверка Target.Address на наличие в диапазонах

Автор Linker, 28 октября 2017, 17:05

Linker

Как можно проверить, лежит ли Target.Address в заданных диапазонах? Например для таких: "А1:А4" и "А6:А9".

Администратор

Макрос
Sub макрос()
   
    Dim Target As Range
    Dim addresses(1 To 2) As Range
    Dim i As Long
   
   
    '1. Записываем в переменную "Taget" какую-нибудь ячейку, чтобы протестировать макрос.
    Set Target = Range("A5")
   
    '2. Запись диапазонов в массив "addresses".
    Set addresses(1) = Range("A1:A4")
    Set addresses(2) = Range("A6:A9")
   
    '3. Проверка, входит ли Target в какой-либо заданный диапазон.
    For i = 1 To UBound(addresses)
        If Not Intersect(Target, addresses(i)) Is Nothing Then
            Exit For
        End If
    Next i
    ' Если не было преждевременного выхода из цикла, значит Target не входит ни в один диапазон.
    If i > UBound(addresses) Then
        MsgBox "Не входит в диапазоны.", vbExclamation
        Exit Sub
    End If
   
    '4. Если макрос оказался здесь, значит Target входит в какой-то диапазон.

End Sub
[свернуть]

Администратор

Или вот так можно одной строкой:
    If Intersect(Target, Range("A1:A4,A6:A9")) Is Nothing Then Exit Sub