什么是循环引用&使用循环引用的争议与对策?

一、循环引用和公式回路

1 循环引用就是一个公式引用了其本身。因为单元格的输出变量同时又是输入变量,因此引用是循环的,即某单元格被用于计算输出变量,进而又将输出变量当作输入变量,循环往复
2 在建模过程中,循环引用可以是某个单元格引用了其本身,或是某个起始单元格引用了其他公式的字符串,而其中最后一个字符串就是该起始单元格本身。这样的循环引用被称为公式回路

★ 建模的出发点是:不使用循环引用,应该避免出现循环引用。一种普遍可被接受的使用循环引用的情况,是在调平资产负债表时,计算超
额现金或循环贷款产生的平均利息(如果不使用循环引用,计算结果会有显著不同,那么请使用循环引用)
★ 可以通过一些方法避免使用循环引用,例如手动复制粘贴,这样做的结果与使用循环引用的结果相近,或利用宏自动完成上述过程
★ 在Excel 2016中启用迭代计算:文件>选项>公式,勾选“启用迭代计算”(可以设置最大迭代次数和最大误差)

二、在迭代计算过程中会发生什么

1、在常规设置状态下(未启用迭代计算) 

在这种状态下,Excel试图计算工作表的所有部分。当所有公式有 序运转时,先计算一些单元格,其结果被后续单元格所引用,然后 其结果又成为显示最终结果的单元格的输入变量。但循环引用却使 计算过程脱离上述轨迹,例如在A1单元格中输入“=A1+1”,就违 背了Excel本应遵循的“首个”与“后续”的顺序原则,会弹出下 图信息(图1)

2、启用迭代计算

在启用迭代计算后,Excel将按照从左至右的顺序来读取公式。 继续前面的例子,在A1单元格中输入“=A1+1”,起初,单元 格A1为0,随着其继续向右读取公式,即读取A1+1 ,因此A1+1 等于1,随着迭代计算的进行,或者开始计算第二个序列,此时 A1等于 1 ,因此A1+1等于2,再开始计算第三个序列,单元格 A1等于2,因此A1+1为3,以此类推....上述计算过程会一直持续 下去,直至达到最大迭代次数。注意,每一次迭代的误差为1, 远远超出0.001的默认最大误差,因此Excel会继续进行迭代计算

★ 一个单元格可以被添加到其本身中的想法是非常奇怪的,或许这就是为什么我们会有一种自然而然的倾向,即不喜欢这种"错误"的构想。然 而,那些使用Excel VBA的宏程序以及掌握其他程序语言的人们知道, x=x+1语句是一个很好的程序结构,它不会引发任何循环问题