错误错误 522:循环引用
Posted
技术标签:
【中文标题】错误错误 522:循环引用【英文标题】:False Error 522: circular reference 【发布时间】:2016-03-25 17:08:27 【问题描述】:我有一个大型电子表格:700 多行,每行都引用了前一行。我使用参考函数:ROW()
、COLUMN()
和 INDIRECT()
、ADDRESS()
。 (是的,我考虑过每 50-100 行固定一次值以减少计算跟踪。)
直到最近我才使用 OpenOffice.org,它运行良好。然而,当文件打开时,LibreOffice 似乎在某些行后放弃,进一步计算变成错误 522。有时更改会使其重新计算所有内容,并且当我撤消更改时错误消失并且不会再次出现。我还发现了 Ctrl-Shift-F9 (必须重新计算),这也使错误消失。
即使文件已经被LibreOffice多次保存和重新保存,当我打开文件时仍然报假错误522,所以它似乎不是兼容性问题。
一个很长的分支计算轨迹是否让软件认为它永远不会达到初始值,因此它必须是循环的? (我的固定值的想法可以解决。)或者还有其他我可能错过的东西吗?
更新
我看不出 INDEX() 会有什么帮助。我想引用正上方的单元格或正上方的行中的单元格。单元格 d46 可以指向 d45 或 b45 或 $a45,这在复制行时有效,但在插入或删除行时无效:如果您在上方插入一行,指向上方 1 行的引用将开始指向上方 2 行,所以每次我都必须编辑公式。该行(每一行)包含对上面行的多个引用,所以我认为最简单的方法是同一列的 INDIRECT(ADDRESS(ROW()-1,COLUMN())) 或 INDIRECT(ADDRESS(ROW() -1,1)) 用于 A 列...有更好的解决方案吗?
【问题讨论】:
INDIRECT 是volatile function,可能是导致问题的原因。我的第一步是尝试重写函数以不使用 INDIRECT;将 INDEX 视为可能的替代品。 【参考方案1】:我不知道问题的具体情况,但听起来像你建议的那样有助于简化公式。
另一种可能性是编写宏来处理一些计算工作。除了 Basic 之外,还可以用 Java 编写宏,您似乎对此很熟悉。可以从电子表格函数调用宏,也可以在加载文档时调用。
使用更强大的工具(例如带有 mysql 的 LibreOffice Base)也可能会有所帮助。通常需要大量INDIRECT()
和ADDRESS()
的电子表格实际上是在使用数据库类型的逻辑。
【讨论】:
电子表格反映了一个包含所有交易的帐户,但会跟踪 2 人或更多人的余额份额并计算应计利息。是的,我可以直接引用上面的行,但这样做的问题是插入或删除行会使此类引用错误。使用INDIRECT()
和ADDRESS()
可以解决这个问题。
我的想法不是简单化公式,而是每隔 50-100 行修复一次(因此将一行中的所有公式更改为它们返回的值),因为我所做的更改/更正不超过返回 50-100 笔交易。以上是关于错误错误 522:循环引用的主要内容,如果未能解决你的问题,请参考以下文章