Для того, чтобы получить диапазон содержащий все ячейки, в которых находится нужная формула, достаточно использовать нижеприведённый вариант, указав, естественно, свою рабочую книгу, рабочий лист, диапазон и формулу.
Private Sub getRangeWithFormulas()
iMaskFormula$ = "=SUBTOTAL(*)"
'Здесь необходимо указать свой шаблон искомой формулы
With ThisWorkbook.Worksheets(1).UsedRange
Dim iCell As Range, iDiapazon As Range
Set iCell = .Find( _
What:=iMaskFormula$, LookIn:=xlFormulas, LookAt:=xlWhole)
If Not iCell Is Nothing Then
iAddress$ = iCell.Address
Set iDiapazon = iCell
Do
Set iCell = .FindNext(After:=iCell)
Set iDiapazon = Union(iCell, iDiapazon)
Loop While iCell.Address <> iAddress$
'Здесь Вы можете работать с полученным диапазоном,
'который всегда будет содержать, как минимум, одну ячейку
End If
End With
End Sub
Предполагается, что:
ThisWorkbook - это текущая рабочая книга, т.е. книга в которой содержится выполняемый, в настоящий момент, код.
Worksheets(1) - это первый рабочий лист указанной книги.
UsedRange - это диапазон, в котором осуществляется поиск.
"=SUBTOTAL(*)" - это текст искомой формулы, в моём примере, это стандартная функция рабочего листа =ПРОМЕЖУТОЧНЫЕ.ИТОГИ()