Привет всем. Хочется немного не стандартного.
Хочу упростить отображение зависимых ячеек. Т.е. ткнул на ячейку, нажал на кнопку и посмотрел, что к ячейке привязано. Стандартных средств недостаточно, потому что интересуют в основном связи с другими листами.
Получить список ячеек не проблема, даже поделюсь здесь — может кто подскажет как это дело ускорить.
| Кусочек кода |
| Private Const OneSec = 1 / (24# * 60# * 60#)
Private Const mArrayStep = 1000
Private Function intCellAddress(R As Range) As String
intCellAddress = R.Parent.Name & "!" & R.Address
End Function
Private Sub EnableScrollbars(Enable As Boolean)
With ActiveWindow
.DisplayHorizontalScrollBar = Enable
.DisplayVerticalScrollBar = Enable
End With
End Sub
Private Function GetDependentCells(myCell As Range) As Variant
GetDependentCells = ""
myCell.Parent.ClearArrows
myCell.ShowDependents
CellAddress = intCellAddress(myCell)
EnableScrollbars False
Dim ArraySize As Long, target As Range
ArraySize = mArrayStep
ReDim a(1 To ArraySize) As String
i = 1
k = 1
tTime = Now()
On Error GoTo l_exit
Do
myCell.NavigateArrow False, i
Set target = myCell.NavigateArrow(False, 1, i)
s = intCellAddress(target)
i = i + 1
If s <> 1 Then
a(k) = s
k = k + 1
If k >= ArraySize Then
ArraySize = ArraySize + mArrayStep
ReDim Preserve a(1 To ArraySize)
End If
End If
If (Now() - tTime) > OneSec Then
Application.StatusBar = "Checking varaible '" & mVariable & "' usage: " & i
DoEvents
tTime = Now()
End If
Loop While True
l_exit:
EnableScrollbars True
myCell.Parent.ClearArrows
ReDim Preserve a(1 To i - 1)
GetDependentCells = a
End Function
|
| |
Хочется связать регионы с одинаковыми формулами, чтобы не флудить длинными списками с одинаковой формулой.
В качестве простого примера:
Ячейка A1 содержит формулу = MyCell * B1
Ячейка A2 содержит формулу = MyCell * B2
Ячейка A3 содержит формулу = MyCell * B3
Я хочу распознать такую последовательность и объединить ячейки в A1:A3 и присвоить им только первую формулу самой верхней или самой правой ячейки. В данном случае = MyCell * B1
На stackoverflow нашёл примерный подход, как можно сравнить формулы:
SameFormula = rng1.FormulaR1C1 = rng2.FormulaR1C1
Но сравнивать всё со всем конечно же совсем не хочется. Понятно, что сравнивать надо только внутри одного листа и после сортировки ячеек.
Может у кого готовый код есть?