Excel 中的#SPILL 错误是什么以及如何修复它?

本文将帮助您了解 #SPILL 错误的所有原因以及在 Excel 365 中修复它们的解决方案。

#洒!是一种新的 Excel 错误,主要发生在生成多个计算结果的公式试图在溢出范围内显示其输出但该范围已包含一些其他数据时。

阻塞数据可以是任何内容,包括文本值、合并的单元格、纯空格字符,甚至没有足够的位置来返回结果。解决方案很简单,要么清除任何阻塞数据的范围,要么选择一个不包含任何类型数据的空单元格数组。

计算动态数组公式时通常会发生溢出错误,因为动态数组公式是将结果输出到多个单元格或数组中的公式。让我们更详细地了解一下,是什么在 Excel 中触发了此错误以及如何解决它。

什么导致溢出错误?

自 2018 年推出动态数组以来,Excel 公式可以一次处理多个值并在多个单元格中返回结果。动态数组是可调整大小的数组,允许公式根据在单个单元格中输入的公式将多个结果返回到工作表上的一系列单元格。

当动态数组公式返回多个结果时,这些结果会自动溢出到相邻单元格中。这种行为在 Excel 中称为“溢出”。结果溢出的单元格范围称为“溢出范围”。溢出范围将根据源值自动扩展或收缩。

如果公式试图用多个结果填充溢出范围,但被该范围内的某些内容阻止,则会发生 #SPILL 错误。

Excel 现在有 9 个使用动态数组功能来解决问题的函数,其中包括:

  • 顺序
  • 筛选
  • 移调
  • 种类
  • 排序方式
  • 兰达雷
  • 独特的
  • XLOOKUP
  • XMATCH

动态数组公式仅在“Excel 365”中可用,目前任何离线 Excel 软件(即 Microsoft Excel 2016、2019)均不支持。

溢出错误不仅是由阻碍数据引起的,还有多种原因可能会导致#Spill 错误。让我们探索您可能遇到 #SPILL 的不同情况!错误以及如何修复它们。

溢出范围不是空白

溢出错误的主要原因之一是溢出范围非空。例如,如果您尝试显示 10 个结果,但如果溢出区域的任何单元格中有任何数据,则公式将返回 #SPILL!错误。

示例 1:

在下面的示例中,我们在单元格 C2 中输入了 TRANSPOSE 函数,以将单元格的垂直范围 (B2:B5) 转换为水平范围 (C2:F2)。 Excel 没有将列切换为行,而是向我们显示#SPILL!错误。

当您单击公式单元格时,您将看到一个蓝色虚线边框,指示显示结果所需的溢出区域/范围 (C2:F2),如下所示。此外,您会注意到一个带有感叹号的黄色警告标志。

要了解错误背后的原因,请单击错误旁边的警告图标,然后查看第一行中以灰色突出显示的消息。如您所见,此处显示“溢出范围不是空白”。

这里的问题是溢出范围 D2 和 E2 中的单元格具有文本字符(非空),因此出现错误。

解决方案:

解决方法很简单,要么清除溢出范围内的数据(移动或删除),要么将公式移动到另一个没有障碍的位置。

一旦您删除或移动阻塞,Excel 将自动使用公式结果填充单元格。在这里,当我们清除 D2 和 E2 中的文本时,公式会按预期将列转换为行。

示例 2:

在下面的例子中,虽然溢出范围显示为空,但公式仍然显示溢出!错误。这是因为溢出实际上并不是空的,它在其中一个单元格中有一个不可见的空间字符。

很难找到隐藏在看似空单元格中的空格字符或任何其他不可见字符。要查找包含不需要的数据的单元格,请单击错误浮标(警告标志)并从菜单中选择“选择阻塞单元格”,它将带您到包含阻塞数据的单元格。

如您所见,在下面的屏幕截图中,单元格 E2 有两个空格字符。当您清除这些数据时,您将获得正确的输出。

有时,不可见字符可能是格式设置为与单元格填充颜色相同的字体颜色的文本,也可能是格式为数字代码 ;;; 的自定义单元格值。当您使用 ;;; 自定义格式化单元格值时,它将隐藏该单元格中的任何内容,无论字体颜色或单元格颜色如何。

溢出范围包含合并的单元格

有时,#SPILL!当溢出范围包含合并的单元格时会发生错误。动态数组公式不适用于合并的单元格。要解决此问题,您所要做的就是取消合并溢出范围内的单元格或将公式移动到另一个没有合并单元格的范围。

在下面的示例中,即使溢出范围为空 (C2:CC8),公式也会返回溢出错误。这是因为单元格 C4 和 C5 合并了。

要确保合并单元格是您收到错误的原因,请单击警告标志并验证原因 - “溢出范围已合并单元格”。

解决方案:

要取消合并单元格,请选择合并的单元格,然后在“主页”选项卡上,单击“合并和居中”按钮并选择“取消合并单元格”。

如果您很难在大型电子表格中找到合并的单元格,请单击警告标志菜单中的“选择阻塞单元格”选项以跳转到合并的单元格。

表中的溢出范围

Excel 表中不支持溢出数组公式。动态数组公式只能在单个单元格中输入。如果在表中输入溢出数组公式或当溢出区域落入表中时,您将收到溢出错误。发生这种情况时,请尝试将表格转换为正常范围或将公式移到表格外。

例如,当我们在 Excel 表格中输入以下溢出范围公式时,我们会在表格的每个单元格中得到一个溢出错误,而不仅仅是公式单元格。这是因为 Excel 会自动将表格中输入的任何公式复制到表格列中的每个单元格。

此外,当公式试图将结果溢出到表中时,您会收到溢出错误。在下面的屏幕截图中,溢出区域位于现有表内,因此我们会收到溢出错误。

要确认此错误背后的原因,请单击警告标志并查看错误原因——“表中的溢出范围”

解决方案:

要修复错误,您需要将 Excel 表恢复到该范围。为此,请右键单击表格内的任意位置,单击“表格”,然后选择“转换为范围”选项。或者,您可以左键单击表格内的任意位置,然后转到“表格设计”选项卡并选择“转换为范围”选项。

溢出范围未知

如果 Excel 无法确定溢出数组的大小,则会触发溢出错误。有时,该公式允许动态数组在每次计算传递之间调整大小。如果动态数组的大小在计算过程中不断变化并且不平衡,则会导致#SPILL!错误。

这种类型的溢出错误通常在使用 RAND、RANDARRAY、RANDBETWEEN、OFFSET 和 INDIRECT 函数等易失性函数时触发。

例如,当我们在单元格 B3 中使用以下公式时,我们会得到溢出错误:

=序列(随机数(1, 500))

在示例中,RANDBETWEEN 函数返回数字 1 到 500 之间的随机整数,并且其输出不断变化。而且 SEQUENCE 函数不知道要在溢出数组中生成多少个值。因此,#SPILL 错误。

您还可以通过单击警告标志——“溢出范围未知”来确认错误原因。

解决方案:

要修复此公式的错误,您唯一的选择是使用不同的公式进行计算。

溢出范围太大

有时,您可能会执行一个公式,该公式输出的溢出范围对于工作表来说太大而无法处理,并且它可能会超出工作表的边缘。当这种情况发生时,您可能会收到#SPILL!错误。要解决此问题,您可以尝试引用特定范围或一个单元格而不是整个列,或使用“@”字符启用隐式交集

在下面的示例中,我们尝试计算 A 列中 20% 的销售额并在 B 列中返回结果,但结果却出现了溢出错误。

B3 中的公式计算 A3 中值的 20%,然后是 A4 中值的 20%,依此类推。它产生超过一百万个结果 (1,048,576) 并将它们全部溢出到 B 列中的 B3 单元格开始,但它会到达工作表的末尾。没有足够的空间来显示所有输出,因此,我们收到了 #SPILL 错误。

如您所见,此错误的原因是 -“溢出范围太大”。

解决方案:

要解决此问题,请尝试使用相关范围或单个单元格引用更改整列,或添加 @ 运算符以执行隐式交集。

修复 1:您可以尝试引用范围而不是整个列。在这里,我们将整个范围 A:A 更改为公式中的 A3:A11,公式将自动用结果填充该范围。

修复 2: 仅使用同一行 (A3) 上的单元格引用替换整列,然后使用填充柄向下复制公式。

修复 3: 您还可以尝试在引用之前添加 @ 运算符以执行隐式交集。这将仅在公式单元格中显示输出。

然后,将公式从单元格 B3 复制到范围的其余部分。

笔记: 编辑溢出的公式时,您只能编辑溢出区域/范围中的第一个单元格。您可以在溢出范围的其他单元格中看到公式,但它们会变灰且无法更新。

内存不足

如果执行导致 Excel 内存不足的溢出数组公式,则可能会触发 #SPILL 错误。在这些情况下,请尝试引用较小的数组或范围。

无法识别/后备

即使 Excel 无法识别或无法协调错误原因,您也可能会收到溢出错误。在这种情况下,请仔细检查您的公式并确保函数的所有参数都正确。

现在,您知道#SPILL 的所有原因和解决方案! Excel 365 中的错误。