Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Определить непересекающийся диапазон ячеек, 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 - 05.12.2018 06:50:37
Чем шире угол зрения, тем он тупее.
Страницы: 1
Наверх