Excel #SPILL! 错误

2025年3月17日 | 阅读 7 分钟

想象一下:您将 Excel 版本升级到带有最新 Excel 更新的 Microsoft Office 365,而您在以前版本中使用的那些尝试和测试过的 Excel 公式却意外停止工作。无论您做什么,Excel 都抛出 #SPILL 错误作为输出。听起来很可怕,对吧!别担心;在本教程中,您将获得 #SPILL 错误的解决方案、原因和修复方法。

什么是 #SPILL! 错误?

Excel #SPILL! error

“#SPILL! 错误是一种 Excel 公式错误,当公式生成多个输出但无法在电子表格上全部显示时,会在您的 Excel 工作表中发生。”

在 Excel 365 中,Microsoft Excel 引入了动态数组的概念。但这个概念在 Excel 中带来了另一个问题,即每当任何公式产生大量计算时,结果输出会自动将这些输出值“溢出”到相邻单元格中。承载结果输出的单元格范围称为溢出范围。并且由于某种原因,Excel 阻止在 Excel 工作表上填充此范围时,就会发生#SPILL! 错误

在许多情况下,此错误是由于一些可以预测和纠正的明显错误造成的。例如,如果您创建了一个 Excel 公式,它将返回多个值,但相邻单元格已被其他数据占用,在这种情况下,该公式将抛出 #Spill 错误。要纠正该错误,只需删除附近单元格中的数据,公式就会成功返回结果。

但有时,此错误的原因无法预测,因此令人困惑。以下是一些遇到此错误的实例:

  • Excel 单元格通常包含隐藏数据,例如空格或非打印字符。当您尝试在这些单元格中生成多个输出时,Excel 会抛出 #Spill 错误。由于数据对用户不可见,因此纠正错误对他们来说变得令人沮丧。
  • 如果用户尝试将相同的公式复制到整个列中,在这种情况下,公式会阻塞溢出范围并抛出 #Spill 错误。
  • 有时,如果您遇到Excel 中不支持动态数组的非常罕见的特性之一,您可能会遇到此错误。

要修复 #Spill 错误,您需要单独检查每个问题并找出问题根源。

如何在 Excel 中修复 #SPILL! 错误

如上所述,Excel #SPILL! 错误可能由于各种原因发生。要确定此错误的根本原因,请单击警告图标(一个带有感叹号的黄色菱形),然后阅读灰色突出显示的第一行消息

Excel #SPILL! error

一旦您找出问题的确切根源,您可以参考下面给出的案例之一,使用详细步骤快速解决问题

1. 溢出范围被阻塞

这个原因是最简单的,也很容易解决。当您的公式必须返回多个值,但它抛出 #SPILL! 错误,因为溢出范围已被其他数据占用时,就会发生这种情况。在下面的示例中,您会注意到数组数字正在阻塞溢出范围

Excel #SPILL! error

解决方案:选择溢出范围单元格来解决问题,Excel 将立即显示溢出边界。检查问题并确保溢出范围中的所有单元格都为空。一旦您从溢出范围单元格中删除数据,SEQUENCE 函数将正常溢出输出

Excel #SPILL! error

2. Excel 表格不支持动态数组

Microsoft Excel 版本不支持表格中的动态数组。在下面的示例中,如您所见,我们正在尝试向 Excel 表格添加动态数组公式,SEQUENCE 公式将在所有行中返回 #SPILL! 错误。

Excel #SPILL! error

解决方案:上述问题的解决方案是将表格转换为普通区域或将公式放置在表格外部以允许其溢出。动态数组公式无法在 Excel 表格内部运行的原因尚不清楚(可能是由于结构化引用的显式语法)。但是,无论如何这两个非常有用的东西都不能很好地配合。

要确认原因,请单击警告图标(一个带有感叹号的黄色菱形),Excel 将在第一行抛出文本 - 表格中的溢出范围。

在这种情况下,您最好的做法是将 Excel 表格转换为区域。为此,右键单击表格内的任意位置,然后单击“表格”>“转换为区域”。

或者您可以尝试将公式移到表格边界之外。

3. 溢出范围未知

Microsoft Excel 无法确定拆分数组的大小。

某些 Excel 函数是不稳定的,不建议与动态函数一起使用,因为返回的输出对最终用户来说是“未知”的。并且动态数组在当前版本的 Excel 中不支持未指定长度的数组。

Excel #SPILL! error

解决方案:尝试并为您的任务实施不同的方法或公式。

当使用不可预测的 Excel 函数(例如 RAND、RANDARRAY、RANDBETWEEN)与动态公式结合使用时,在大多数情况下,它会返回 #SPILL 错误,因为不稳定函数返回的数组在工作表计算之间发生变化,并且函数无法确定其大小。

在这种情况下,错误消息显示 - 溢出范围未知。

4. 溢出范围包含合并单元格

溢出概念与合并单元格冲突。

解决方案:如果 Excel 由于合并单元格而抛出 #Spill 范围错误,请快速取消合并溢出区域中/周围的单元格。或者,您可以将相应的公式移动到不包含合并单元格的不同单元格中。

Excel #SPILL! error

如果溢出数组包含一个或多个合并单元格,则错误会立即抛出一个错误窗口,显示以下消息 - “溢出范围包含合并单元格”。

如果您发现难以检测合并单元格或花费的时间比平时更长,您可以选择“阻塞单元格”选项以跳过有问题的单元格,它将自动跳转到未合并的单元格。

Excel #SPILL! error

5. 溢出范围过大

在许多情况下,Microsoft Excel 无法返回拆分数组的输出,因为它超出了工作表边界。

在下面的公式中,我们使用 SEQUENCE 函数创建一个包含 17,000 列的数组。

Excel #SPILL! error

如您所见,上面的公式返回 #SPILL 错误。这是因为 Excel 电子表格只包含 16,384 列,而我们正在对第 17000 列进行排序,该列不存在。

解决方案:上述问题的解决方案是避免使用创建不适合 Excel 电子表格空间的溢出范围的引用和公式。

6. 隐式交集 (@)

在动态数组概念出现之前,Microsoft Excel 应用了一种称为“隐式交集”的方法,以确保理想情况下返回多个结果的指定公式只返回一个输出。在非动态数组的情况下,相同的公式返回输出而没有任何错误。

但如果您使用动态数组创建公式,则有可能抛出 #SPILL 错误。例如,在下图中,我们使用了公式=$B$2:$B$5+3 并将相同的公式拖到单元格下方。一旦您拖动公式,您就会注意到 Excel 返回了 #SPILL 错误。

Excel #SPILL! error

如果您使用的是 Excel 2016 版本,则不会抛出此错误,因为隐式交集会阻止公式返回多个输出。但是,使用动态数组,上述概念将不起作用。由于公式会自动返回多个结果,这些结果最终会相互冲突,因此公式被复制到 B2:B5 中。

解决方案:与其一起计算多个结果,不如添加 @ 运算符以启用隐式交集。

注意:此解决方案也与您在旧版本中可能找到的公式有关,与旧版本 Excel 中创建的公式中出现的“@”字符不同。“@”字符的插入是为了保持公式之间的兼容性,这样多个输出就不会相互冲突。由于大多数旧公式无法溢出到多个单元格中,开发人员使用 @ 来确保当公式在支持动态数组的 Excel 版本中创建时,行为保持不变。

在您的公式=$B$2:$B$5+3 中,在您想将具有多个结果的数组转换为单个值的位置添加“@”字符。

在第一个单元格中输入公式。接下来,使用鼠标光标将公式向下拖动到各行。这将把公式复制到相应的行。

在此示例中,公式将变为如下

=@$B$2:$B$5+3

Excel #SPILL! error

因为上面的输出返回单个值而不是动态数组,所以您可以将此公式用于范围和表格。但是,如果您将公式合并到表格中,则结构化引用将是一个明智而有效的选择

=[@Sales]*10%

Excel #SPILL! error

Eureka!现在我们已经涵盖了此错误的所有各种可能性。因此,您可以自信地排除故障并修复 Excel 中的 #SPILL 错误。


下一个主题Excel Contains 函数