UNIQUE函数返回#SPILL!错误是因溢出区域被非空单元格占用,需清除干扰内容、迁移至空旷位置、改用TEXTJOIN+FILTER组合公式或解除工作表保护并解锁溢出区域。

如果您在Excel中使用UNIQUE函数提取唯一值时返回#SPILL!错误,且错误提示指向“溢出范围被非空单元格占用”,则说明UNIQUE函数计算出的动态数组结果无法完整展开至相邻空白区域。以下是解决此问题的步骤:
一、清除溢出区域中的干扰内容
UNIQUE函数会自动向右、向下扩展以显示全部唯一值,该扩展区域(溢出范围)必须完全为空。若其中存在任何字符、空格、公式结果或不可见符号,均会导致#SPILL!错误。
1、定位UNIQUE函数所在单元格,观察其右侧及下方高亮显示的蓝色虚线框——该区域即为预期溢出范围。
2、选中整个虚线框覆盖的所有单元格,按Delete键彻底清空内容。
3、检查是否残留不可见字符:在其中一个疑似单元格中双击进入编辑状态,光标前后逐字按←和→键确认无隐藏空格;若有,手动删除。
4、按Enter退出编辑,观察UNIQUE函数是否恢复正常输出。
二、将UNIQUE函数移至足够空旷的位置
当当前工作表区域密集、难以腾出连续空白区时,可主动将函数迁移至行号较大或列字母靠后的空白区域,确保其右侧与下方至少有足够行列容纳最大可能输出量。
1、复制含UNIQUE函数的单元格。
2、选择目标位置——例如第1000行第Z列(Z1000)或更远,该位置上下左右数十列/行均为未使用状态。
3、在目标单元格中右键选择“选择性粘贴”→勾选“公式”,点击确定。
4、确认新位置周围无任何数据,特别注意检查Z1000右侧的AA1000、AB1000等列以及下方的Z1001、Z1002等行是否真正为空。
三、用TEXTJOIN+FILTER替代UNIQUE规避溢出机制
若工作环境受限(如旧版Excel不支持动态数组)、或需强制控制输出位置,可改用兼容性更强的组合公式,避免触发溢出校验。
1、假定原始数据在A2:A100,先在B2输入辅助列公式:=IF(COUNTIF($A$2:A2,A2)=1,ROW(),""),下拉填充至B100。
2、在C2输入提取公式:=TRIM(TEXTJOIN(",",TRUE,FILTER(A2:A100,B2:B100"")))(适用于Office 365/Excel 2021)。
3、若需逐行列出而非逗号连接,在D2输入:=INDEX(FILTER(A2:A100,B2:B100""),ROW(A1)),然后下拉填充至出现#VALUE!为止。
4、此方法不依赖动态数组溢出机制,因此完全绕过#SPILL!错误触发条件。
四、检查工作表保护与锁定状态
即使视觉上单元格为空,若其所在行/列被设置为“锁定”且工作表处于保护状态,Excel仍会拒绝向该区域写入动态数组结果,从而报#SPILL!错误。
1、点击“审阅”选项卡,查看“撤消工作表保护”按钮是否可用;若可用,说明当前受保护。
2、点击“撤消工作表保护”,输入密码(如有)解除保护。
3、再次选中UNIQUE函数所在单元格,按F2后按Enter强制重算。
4、如需保留保护,重新启用前请先确认溢出区域所在行列已设置为“未锁定”:选中对应区域→右键“设置单元格格式”→“保护”选项卡→取消勾选“锁定”→再启用工作表保护。










