Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1
RSS
Определить непересекающийся диапазон ячеек, Union(x, y) - Intersect(x, y)
 
Здравствуйте, уважаемые форумчане.
Одна из задач, которую мне приходилось решать не раз - определить диапазон ячеек, которые входят в два исходных диапазона, за исключением пересекающейся области этих диапазонов. Образно говоря: "Union(x, y) - Intersect(x, y)"
Предлагаю на Ваш суд одно из решений этой задачи:
Код
Private Sub qq()
    Dim x As Range, y As Range, z As Range
    Set x = [B2:F10] 'Исходный диапазон 1
    Set y = [D7:H15] 'Исходный диапазон 2
    Set z = Union(x, y)
    If Not Intersect(x, y) Is Nothing Then
        z.FormatConditions.Delete
        z.FormatConditions.Add xlExpression, Formula1:=z.Address = z.Address
        Intersect(x, y).FormatConditions.Delete
        Set z = z.SpecialCells(xlCellTypeAllFormatConditions)
        z.FormatConditions.Delete
    End If
    z.Select 'Искомый диапазон
End Sub
Пример файла во вложении.
Плюсы:
1. Отсутствие явного перебора ячеек диапазонов. Отсутствие каких-либо циклов.
2. Быстрое получение результата при больших объемах исходных диапазонов.
3. Возможность работы с разрывными (не непрерывными) диапазонами.
Минусы:
1. Невозможность использования условного форматирования в пределах рассматриваемых диапазонов.
2. Невозможность использования в виде функции рабочего листа (из-за применяемого метода "SpecialCells").
Есть ли другие "быстрые" способы решения подобной задачи?
Изменено: SAS888 - 5 Дек 2018 06:50:37
Чем шире угол зрения, тем он тупее.
 
SAS888,
Противоположную задачу решали с копированием на временный лист
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=104727&TITLE_SEO=104727-summirovanie-znacheniy-v-nesvyazannom-diapazone-bez-dublirovaniya-pere на сколько мне известно ZVI в свое время предлагал аналогичный метод. Это решит вопрос использования условного форматирования в источнике, но не позволит сделать UDF
Изменено: БМВ - 5 Дек 2018 07:48:21
 
Спасибо.
Чем шире угол зрения, тем он тупее.
Страницы: 1
Читают тему (гостей: 1)
Наверх