2012-04-17 2 views
4

Кнопки прецедентов/зависимостей Trace в Excel чрезвычайно полезны при анализе структуры сложной электронной таблицы.Как отслеживать косвенные прецеденты в Excel?

У меня есть лист, состоящий из многих вызовов, предикаты которых сгенерированы программно, используя ссылочные функции, такие как CELL(), OFFSET() и т. Д., Где аргументы этих функций являются выражениями.

При использовании кнопок трассировки excel не будет отслеживать ячейки, которые явно не указаны в формуле.

Есть ли способ получить полный набор прецедентов конкретной ячейки?

Примечание: поиск в Google Я видел приложение на рынке Office, которое доступно для покупки и, возможно, делает это. Интересно, есть ли способ сделать это с предоставленной функциональностью Excel?

EDIT: вот пример: в ячейке M5 У меня есть следующая формула, которая ссылается на D5, D13 и G6. G6 вычисляется функцией OFFSET() относительно G4.

=IMSUM($D5,IMPRODUCT($D13,OFFSET($G$4, 2*(ROW()-ROW($G$4)), 0))) 

При отслеживании прецедентов ячейки Excel не отображает ячейку G6. Вместо этого он показывает базу смещения, которая является G4.

+1

Можете ли вы обновить свой вопрос несколькими примерами некоторых из ваших более сложных формул? –

+0

основной целью трассировки является сохранение [цепочки пересчета] (http://msdn.microsoft.com/en-us/library/bb687891.aspx?ppud=4) внутри вашего файла excel после ввода формулы - давайте назовем это «во время компиляции», - но волатильные функции оцениваются «во время выполнения» => вам нужен макрос VBA или надстройка для однократной оценки прецедентов летучих функций – Aprillion

+1

, и я думаю, что такого монстра нет как «полный набор прецедентов», если вы хотите включить изменчивые пользовательские функции или произвольные комбинации регулярных функций, таких как 'offset (if (косвенный (sumproduct (...' – Aprillion

ответ

1

а) перепроектировать всю формулу двигатель Excel

б) написать парсер VBA как раз для вашего случая - то есть получить аргументы OFFSET из формулы строки и оценить их

с) Дон» t использовать летучие формулы, если вы можете избежать этого - например
=IMSUM($D5,IMPRODUCT($D13,INDEX($G$4:$G$999, 2*(ROW()-ROW($G$4)) + 1)))

+0

Спасибо, как и для b), мне нужно будет разобрать каждую функцию, которая потенциально ссылается на ячейку косвенно, что много функций ... – ysap

+0

@ysap только каждая функция, которую вы хотите использовать ** использовать ** для ссылки на ячейку опосредованно ;)) я добавил опцию c) если вы можете использовать функции поиска вместо смещенных и названных диапазонов вместо косвенных ... – Aprillion