Здравствуйте, уважаемые форумчане. Одна из задач, которую мне приходилось решать не раз - определить диапазон ячеек, которые входят в два исходных диапазона, за исключением пересекающейся области этих диапазонов. Образно говоря: "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"). Есть ли другие "быстрые" способы решения подобной задачи?