В Excel вы можете указать ячейке ссылаться на другую ячейку, чтобы вычислить ее значение. Я хотел бы сделать наоборот, чтобы получить любые ячейки, которые ссылаются на текущую выбранную ячейку. Это вообще возможно в Excel, в качестве одной из встроенных функций или сценария VBA?
6 ответов
Не могу сказать, как использовать его программно, но на ленте "Формулы" есть панель "Аудит формул", которая позволяет "Отслеживать зависимости" и нарисует визуальную стрелку на листе из выбранной в данный момент ячейки к любой той ссылке это через формулу.
Также есть соответствующая команда "Trace Precedents".
Видимо, вы можете получить доступ к прецедентам / зависимым элементам трассировки в макросе: код макроса для отслеживания зависимых элементов / прецедентов @ OzGrid.com со ссылкой на сообщение с завершенной функцией VBA @ vbaexpress.com:
Sub FindPrecedents()
' written by Bill Manville
' With edits from PaulS
' this procedure finds the cells which are the direct precedents of the active cell
Dim rLast As Range, iLinkNum As Integer, iArrowNum As Integer
Dim stMsg As String
Dim bNewArrow As Boolean
Application. ScreenUpdating = False
ActiveCell.ShowPrecedents
Set rLast = ActiveCell
iArrowNum = 1
iLinkNum = 1
bNewArrow = True
Do
Do
Application.Goto rLast
On Error Resume Next
ActiveCell.NavigateArrow TowardPrecedent:=True, ArrowNumber:=iArrowNum, LinkNumber:=iLinkNum
If Err.Number > 0 Then Exit Do
On Error Goto 0
If rLast.Address(external:=True) = ActiveCell.Address(external:=True) Then Exit Do
bNewArrow = False
If rLast.Worksheet.Parent.Name = ActiveCell.Worksheet.Parent.Name Then
If rLast.Worksheet.Name = ActiveCell.Parent.Name Then
' local
stMsg = stMsg & vbNewLine & Selection.Address
Else
stMsg = stMsg & vbNewLine & "'" & Selection.Parent.Name & "'!" & Selection.Address
End If
Else
' external
stMsg = stMsg & vbNewLine & Selection.Address(external:=True)
End If
iLinkNum = iLinkNum + 1 ' try another link
Loop
If bNewArrow Then Exit Do
iLinkNum = 1
bNewArrow = True
iArrowNum = iArrowNum + 1 'try another arrow
Loop
rLast.Parent.ClearArrows
Application.Goto rLast
MsgBox "Precedents are" & stMsg
Exit Sub
End Sub
К вашему сведению, автор второго поста говорит, что эта функция не может обрабатывать внешние ссылки на закрытые рабочие книги. Это оставлено в качестве упражнения для читателя.
Вот ссылка на пример прецедента трассировки vba на msdn.
http://msdn.microsoft.com/en-us/library/aa195797(office.11).aspx
На Excel 2008 (Mac) это находится:
Инструменты> Аудит> Отслеживание зависимостей
** При вводе Trace в меню Help на Mac отображаются все функции меню Trace.*
Макросы не поддерживаются на Mac, но если макрос написан с использованием версии Excel для Windows, то версия для Mac запустит его. Расстраивает, но это правда.
В Office 2007 просмотрите формулы и используйте прецеденты трассировки или зависимые трассировки. Я не могу вспомнить, где это было в более ранних версиях, но это почти то же самое действие