Форум по VBA и MS Office

VBA, Excel => VBA, макросы в Excel => Тема начата: Linker от 28 октября 2017, 17:05

Название: Excel VBA Макросы: Проверка Target.Address на наличие в диапазонах
Отправлено: Linker от 28 октября 2017, 17:05
Как можно проверить, лежит ли Target.Address в заданных диапазонах? Например для таких: "А1:А4" и "А6:А9".
Название: Re: Excel VBA Макросы: Проверка Target.Address на наличие в диапазонах
Отправлено: Администратор от 28 октября 2017, 17:16
Макрос
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
[свернуть]
Название: Re: Excel VBA Макросы: Проверка Target.Address на наличие в диапазонах
Отправлено: Администратор от 28 октября 2017, 17:29
Или вот так можно одной строкой:
    If Intersect(Target, Range("A1:A4,A6:A9")) Is Nothing Then Exit Sub
Название: Re: Excel VBA Макросы: Проверка Target.Address на наличие в диапазонах
Отправлено: Linker от 28 октября 2017, 22:39
Спасибо, помогло!