为什么隐式交集运算符会改变我的公式的行为?

为什么隐式交集运算符会改变我的公式的行为?

由于我从 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解决了这个问题。虽然他们的发行说明,一些局部测试让我相信这不再是问题。

相关内容