2016-03-25 7 views
0

У меня большая электронная таблица: более 700 строк, каждая из которых имеет ссылки на предыдущую строку. Я использую контрольные функции: ROW(), COLUMN() и INDIRECT(), ADDRESS(). (Да, я рассмотрел фиксирующие значения каждые 50-100 строк, чтобы уменьшить расчетный трейл.)False Ошибка 522: круговая ссылка

До недавнего времени я использовал OpenOffice.org, и он отлично работал. LibreOffice, однако, когда файл открыт, кажется, сдался после некоторых строк, и дальнейшие вычисления становятся ошибкой 522. Иногда изменение заставляет его пересчитывать все, и ошибки исчезают и не появляются снова, когда я отменю изменение. Я также узнал о Ctrl-Shift-F9 (необходимо перерасчитать), что также приводит к исчезновению ошибок.

Несмотря на то, что файл был сохранен и повторно сохранен LibreOffice несколько раз, он все еще сообщает false Ошибка 522, когда я открываю файл, так что это не похоже на проблему совместимости.

Проблема заключается в том, что очень длинный разветвленный след расчета заставляет программное обеспечение думать, что он никогда не достигнет начальных значений, и поэтому он должен быть круговым? (Что могла бы решить моя идея фиксации ценностей.) Или может быть что-то еще, что я, возможно, пропустил?

UPDATE

Я не вижу, как INDEX() не поможет. Я хочу обратиться к ячейке непосредственно выше или ячейке из строки непосредственно выше. Ячейка d46 может указывать на d45 или b45 или $ a45, и это будет работать при копировании строки, но не при вставке или удалении строки. Если вы вставляете строку чуть выше, то ссылки, указывающие 1 строку выше, начнут указывать 2 строки выше , поэтому каждый раз мне придется редактировать формулы. Строка (каждая строка) содержит несколько ссылок на строку чуть выше, поэтому я думал, что самый простой способ будет НЕПРЯМЫМ (АДРЕС (ROW() - 1, COLUMN())) для того же столбца или INDIRECT (ADDRESS (ROW() -1,1)) для столбца A ... Любые лучшие решения?

+0

INDIRECT - [изменчивая функция] (http://chandoo.org/wp/2014/03/03/handle-volatile-functions-like-they-are-dynamite/) и может быть источником проблемы , Моим первым шагом было бы попытаться переписать функцию, чтобы не использовать INDIRECT; рассмотрите INDEX как возможную замену. – Lyrl

ответ

0

Я не знаю специфики проблемы, но похоже, что это поможет упростить формулы, как вы предложили.

Другая возможность заключается в том, чтобы писать макросы для обработки некоторых вычислений. Помимо Basic, макросы могут быть написаны на Java, с которыми вы, похоже, знакомы. Макросы можно вызывать из электронной таблицы или вызывать при загрузке документа.

Он также может помочь использовать более мощный инструмент, такой как LibreOffice Base с MySQL. Часто электронные таблицы, которые нуждаются в большом количестве INDIRECT() и ADDRESS(), действительно используют логику типа базы данных.

+0

Электронная таблица зеркалирует учетную запись со всеми транзакциями, но отслеживает балансовые доли двух или более человек и рассчитывает начисленные проценты. Да, я мог бы напрямую ссылаться на строку выше, но проблема в том, что вставка или удаление строки делает такие ссылки неправильными. Использование 'INDIRECT()' и 'ADDRESS()' решает эту проблему. – Heimdall

+0

Моя идея заключалась в том, чтобы не просто формулы, а исправлять каждую 50-тысячную строку (поэтому измените все формулы в строке на возвращаемые значения), потому что я не делаю изменений/исправлений более 50-100 транзакций назад. – Heimdall