Ложная ошибка 522: циклическая ссылка

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

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

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

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

ОБНОВИТЬ

Я не вижу, как INDEX() может помочь. Я хочу сослаться на ячейку непосредственно выше или на ячейку из строки непосредственно выше. Ячейка d46 может указывать на d45, b45 или $a45, и это будет работать при копировании строки, но не при вставке или удалении строки: если вы вставите строку чуть выше, ссылки, указывающие на 1 строку выше, начнут указывать на 2 строки выше. , так что каждый раз мне приходилось бы редактировать формулы. Строка (каждая строка) содержит несколько ссылок на строку чуть выше, поэтому я подумал, что самым простым способом будет ДВССЫЛ(АДРЕС(СТРОКА()-1,СТОЛБЦ())) для того же столбца или ДВССЫЛ(АДРЕС(СТРОКА() -1,1)) для столбца A... Есть ли лучшие решения?


person Heimdall    schedule 25.03.2016    source источник
comment
INDIRECT – это независимая функция и может быть причиной проблемы. Моим первым шагом будет попытка переписать функцию, чтобы она не использовала ДВССЫЛ; рассмотрите INDEX как возможную замену.   -  person Lyrl    schedule 28.03.2016


Ответы (1)


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

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

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

person Jim K    schedule 25.03.2016
comment
Электронная таблица отражает учетную запись со всеми транзакциями, но отслеживает доли баланса 2 или более человек и рассчитывает начисленные проценты. Да, я мог бы напрямую сослаться на строку выше, но проблема в том, что вставка или удаление строки делает такие ссылки неправильными. Использование INDIRECT() и ADDRESS() решает эту проблему. - person Heimdall; 27.03.2016
comment
Моя идея состояла не в том, чтобы просто формулировать формулы, а в том, чтобы исправить каждую 50-ю-100-ю строку (поэтому замените все формулы в строке на значения, которые они возвращают), потому что я не вношу изменения/исправления более чем 50-100 транзакций назад. - person Heimdall; 27.03.2016