Определение блока ячеек, расположенного на пересечении двух и более диапазонов, с помощью метода Application.Intersect из кода VBA Excel. Пример.
Описание
Если общие ячейки для всех заданных диапазонов не обнаружены, метод Application.Intersect возвращает значение Nothing
.
Если в качестве аргументов метода Application.Intersect указаны диапазоны из разных листов, возвращается ошибка.
Синтаксис
1 |
Application.Intersect (Arg1, Arg2, Arg3, ..., Arg30) |
- Arg1, Arg2 – обязательные аргументы, представляющие из себя пересекающиеся диапазоны (объекты Range).
- Arg3, …, Arg30* – необязательные аргументы, представляющие из себя пересекающиеся диапазоны (объекты Range).
* Допустимо использование до 30 аргументов включительно.
Пример
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub Primer() Dim rngis As Range, arg1 As Range, arg2 As Range, arg3 As Range Set arg1 = Range("A1:F10") Set arg2 = Range("C4:I18") Set arg3 = Range("D1:F22") Set rngis = Application.Intersect(arg1, arg2, arg3) If rngis Is Nothing Then MsgBox "Указанные диапазоны не пересекаются" Else MsgBox "Адрес пересечения диапазонов: " & rngis.Address End If End Sub |
Строку
1 |
Set rngis = Application.Intersect(arg1, arg2, arg3) |
можно записать без использования переменных так:
1 |
Set rngis = Application.Intersect(Range("A1:F10"), Range("C4:I18"), Range("D1:F22")) |
Есть и другой способ определения пересечения диапазонов. Он заключается в использовании свойства Range объекта Worksheet*:
1 2 3 |
Set rngis = Range("A1:F10 C4:I18 D1:F22") 'или Set rngis = Range(arg1.Address & " " & arg2.Address & " " & arg3.Address) |
Но у этого способа есть существенных недостаток – свойство Range возвращает ошибку, если пересечение указанных диапазонов не существует. Поэтому преимущество остается за методом Application.Intersect, который, в этом случае, возвратит значение Nothing
.
* Если код VBA Excel работает со свойствами активного листа, объект Worksheet можно не указывать. Например, строка MsgBox Name
отобразит имя активного листа.