Найти в Дзене
VBA Excel с нуля

VBA Excel № 115. Находим диапазон в другом диапазоне.

Приветствую, дорогие читатели! Давайте узнаем метод идентификации диапазона внутри другого диапазона более подробно. В данной статье мы рассмотрим функцию "ВДиапазоне", представленную в коде (см. скриншот). Эта функция принимает два аргумента, оба из которых являются объектами Range, и возвращает значение True, если первый диапазон содержится внутри второго. Однако лучше всего использовать эту функцию внутри других процедур. Этот код использует метод Union объекта Application для получения объединения двух объектов Range. Объединение включает ячейки, принадлежащие обоим диапазонам. Если адрес объединения совпадает с адресом второго диапазона, значит, первый диапазон полностью содержится внутри второго. Однако, если два диапазона находятся на разных листах, метод Union вызовет ошибку. Для обработки таких ситуаций используется директива On Error. Можно применить в формулах рабочего листа, например: вернёт Истину. Приведем пример использования функции процедурой Test: В этом примере функ

Приветствую, дорогие читатели!

Давайте узнаем метод идентификации диапазона внутри другого диапазона более подробно. В данной статье мы рассмотрим функцию "ВДиапазоне", представленную в коде (см. скриншот). Эта функция принимает два аргумента, оба из которых являются объектами Range, и возвращает значение True, если первый диапазон содержится внутри второго. Однако лучше всего использовать эту функцию внутри других процедур.

-2

Этот код использует метод Union объекта Application для получения объединения двух объектов Range. Объединение включает ячейки, принадлежащие обоим диапазонам. Если адрес объединения совпадает с адресом второго диапазона, значит, первый диапазон полностью содержится внутри второго.

Однако, если два диапазона находятся на разных листах, метод Union вызовет ошибку. Для обработки таких ситуаций используется директива On Error.

Можно применить в формулах рабочего листа, например:

-3

вернёт Истину.

-4

Приведем пример использования функции процедурой Test:

-5

В этом примере функция вернет ИСТИНА, так как диапазон r1 полностью содержится внутри диапазона r2. Однако, если изменить лист с диапазоном (во втором примере с процедурой Test_2), то:

-6

функция вернет ЛОЖЬ, так как диапазоны r1 и r2 находятся на разных листах.

И конечно, давайте разберем функцию:

Function ВДиапазоне(rng1, rng2) As Boolean- Это начало определения функции с именем "ВДиапазоне". Она принимает два аргумента, rng1 и rng2, которые предполагается будут объектами Range, и возвращает значение типа Boolean.

On Error GoTo ErrHandler - Эта строка включает обработку ошибок. Если произойдет ошибка в следующем блоке кода, выполнение будет перенаправлено к метке "ErrHandler".

If Union(rng1, rng2).Address= rng2.Address Then- Это условие проверяет, равен ли адрес объединения rng1 и rng2 адресу rng2. Если это так, то rng1 содержится внутри rng2.

ВДиапазоне = True - Если условие из предыдущей строки истинно, то устанавливается значение функции в True, и функция завершает свое выполнение с помощью Exit Function.

ErrHandler: ВДиапазоне = False - Метка ErrHandler указывает на место, куда перейти в случае ошибки (если она произойдет). В этом случае, если возникает ошибка, функция устанавливает свое значение в False и завершает выполнение.