由于我从 Excel 中进行了更新,导致自动插入隐式交集运算符 @,我的公式在 Excel 工作簿中的行为发生了改变。
我注意到问题出现在用户定义的公式中。
我已将问题缩小到 MCVE,具体场景如下:
让自定义范围是一个包含 8 行的范围,其中一行是空的:
Alpha
Bravo
Charlie
Echo
Foxtrot
Golf
Hotel
让自定义函数是一个用户定义的函数,以整数 N 作为参数并返回该自定义范围的第 N 个元素
Function CustomFunction(Num As Integer)
Dim R As Range
Set R = Range("CustomRange")
CustomFunction = R(Num, 1)
End Function
让我们比较一下包含和省略隐式交集运算符的公式返回的结果:
=IF(@CustomFunction(4)="","EMPTY","NOT_EMPTY")
=IF(CustomFunction(4)="","EMPTY","NOT_EMPTY")
第一个会让步NOT_EMPTY
,而第二个也会让步EMPTY
。
由于 Excel 会自动将 @ 添加@
到我的旧工作簿中,因此我的公式不再起作用。如果我找到并替换所有 @ 为空,我的公式将再次按预期工作(因此文章中的句子指出“你的公式将继续按照一贯的方式计算。“ 是不正确的)。
我希望 Excel 停止更改我的公式,有什么办法吗?
答案1
这 隐式交集运算符:@ 已添加到 Excel 365 for Windows 版本 1907 内部版本 11901.20176 中,作为 动态数组公式 重写 Excel 引擎,并且它将继续存在。
本质上,微软废除了数组函数的概念(尽管它们仍可工作),而是允许几乎所有函数(包括 VLOOKUP)返回一个值数组。如果返回值的数组无法容纳在可用空间中,则会收到新的 #SPILL! 错误。
您可以使用 @ 运算符来避免该错误,如文章中所述 禁用 #SPILL! 错误。然而,这需要修改你的公式。
好消息是,如果 @ 运算符破坏了您的公式,并且您手动删除了它,那么在保存后它将保持删除状态。Excel 只会对每个电子表格进行一次公式转换。不幸的是,我们目前不知道如何手动打开此标志以避免转换。
实际上,已知的撤消公式转换的选项并不多:
- 继续使用以前版本的 Excel,直到 Microsoft 提供避免转换的方法
- 编写一个 VBA 宏,从所有公式中删除 @ 运算符(冒着出现新的 #SPILL!错误的风险)
- 手动修复您的公式。
这些方法都不是特别令人满意,但我还没有找到更好的方法。
答案2
有点晚了,但我可以确认构建14026.20246解决了这个问题。虽然他们的发行说明,一些局部测试让我相信这不再是问题。