excel表格为什么不执行公式

发布时间: 2023-11-27 18:13 阅读: 文章来源:1MUMB103801PS

今天我们来认识一个比较奇怪的问题。

表格中输入公式得到了正确结果,但随着公式下拉填充,却突然发现公式的结果为0,无法再输出正确的结果。

如下图所示,图中公式为:

=INDEX(出入库明细表!$C$2:$C$1000,MATCH(0,IF({1},COUNTIF(B$2:B362,出入库明细表!$C$2:$C$1000)),))&""

这是一个典型的index+match函数组合,常用于引用某一列或区域中指定位置的值

这个公式嵌套了if和countif函数,它们可能是造成公式结果出错的缘由,但经过检查,以及前面已输出的公式结果,发现公式结构和写法并不存在错误情况。

这时作者在表格右下角发现一段文本,“正在计算(20个线程)45%”

这意味着表格正在执行计算,由于线程较多,执行计算的时间也比较长。

那么excel总是在出现“正在计算”与这个index公式结果离奇出错有着什么联系吗

我们来看一个示例,重新点击上方任意一个公式结果,再次向下拖动来填充公式,却发现结果变了,变成了复制首个单元格的内容。

那是不是公式引用的结果就是相同的呢?

当然不是,因此从这个组合公式的含义来看,它就是跳过重复值来引用一列中的数据。

我们点击编辑公式栏,选择match函数表达式按下F9执行公式结果预览,可见它的结果值是467。

作为index函数的第2参数偏移行,即表示查找C列中第467行的数据。

我们点击引用表的C列第468行,因为是从C2单元格开始,所以向下再偏移一行,为468行,可见其数据为“手动钻头”,这与公式输出的结果不同!

这时公式输出的结果与引用的值不一致,而且还不是公式表达错误,那么到底哪里出了问题?

在日常工作中,大家使用公式的频率很高,但对公式计算规则可能没有特别了解。

从公式就可以看出,这是一个循环引用的函数公式。

因为在B363单元格中执行的公式,当中的countif函数的第1参数“B$2:B362”,是以上一个单元格至首个单元格作为计数区域,而上一个单元格的结果又是以上上一个单元格至首个单元格作为计数区域,则意味每个公式更新的结果都是跟随上一个公式甚至上面所有公式结果进行更新的!

在这种循环引用情境下,excel需要执行的计算量将是巨大的,如果将B363单元格中的公式参数设置为B$2:B363”,即引用公式所在的单元格,则属于迭代计算,默认情况下,需要手动开启迭代计算系统才会执行运算。

但迭代计算,与循环引用一样,都会占用excel非常大的算力,因此在输入公式时,要切记避免使用循环引用,否则就容易出现如上面所讲的“单元格总是正在计算”!

所以到这里,应该可以想到,index公式结果出错的原因不是来自于公式的写法错误,而是系统算力无法提供公式结果的即时更新,而产生结果为0或复制首个单元格的内容

•••展开全文
相关文章