Excel VBA-如何添加动态数组公式

Excel VBA-如何添加动态数组公式,excel,vba,excel-formula,dynamic-arrays,Excel,Vba,Excel Formula,Dynamic Arrays,我正在通过VBA向工作表中添加公式,该公式应为: =UNIQUE(IF(TableA[ColumnA]=A1,TableA[ColumnB],"")) 这利用了Excel中新的溢出功能,为我提供了一个列B值列表,其中列a中的相关值与单元格a中的值匹配。我还应用了唯一函数来删除任何多个空白(“”)结果 如果我在Excel中手动键入公式,这将非常有效,但是在使用VBA添加公式时,Excel会在公式中添加@符号,并使其显示#VALUE 用于添加公式的VBA行为: =Cells(x,y).Formul

我正在通过VBA向工作表中添加公式,该公式应为:

=UNIQUE(IF(TableA[ColumnA]=A1,TableA[ColumnB],""))
这利用了Excel中新的溢出功能,为我提供了一个列B值列表,其中列a中的相关值与单元格a中的值匹配。我还应用了唯一函数来删除任何多个空白(“”)结果

如果我在Excel中手动键入公式,这将非常有效,但是在使用VBA添加公式时,Excel会在公式中添加@符号,并使其显示#VALUE

用于添加公式的VBA行为:

=Cells(x,y).Formula = "=UNIQUE(IF(TableA[ColumnA]=A1,TableA[ColumnB],""""))"
Excel中的结果输出为:

=@UNIQUE(IF(TableA[@[ColumnA]]=A1,TableA[ColumnB],""))
发生了什么,我错过了什么


提前谢谢

问得好,我查了一下


简而言之:

使用
=单元格(x,y).公式2
代替
=单元格(x,y).公式


解释:

显示的
@
称为隐式求交运算符。从MS文档:

隐式交集逻辑将多个值减少为单个值。Excel这样做是为了强制公式返回单个值,因为 单元格只能包含一个值。如果你的公式返回 一个值,然后隐式交集什么都不做(即使它 技术上是在后台完成的)

但为什么它会出现在您较新的Excel O365中?嗯,
Range.Formula
使用IIE(隐式交集),因此添加了
@
基本上撤消了动态数组功能。是一个新的动态数组函数。因此,要在代码中写出这一点,应该使用属性(或者如果使用
R1C1
符号)。这些属性使用AE(数组求值),现在是默认值

  • 是MS关于该主题的资料性文档,详细解释了
    公式
    公式2
    之间的区别

  • 如果您想了解有关隐式求交操作符的更多信息,请查看

  • 早些时候,我用一个例子回答了另一个涉及隐式相交的问题,这个例子是关于如果你觉得它有趣的话,它实际上是如何工作的


对于基本理解来说,这是一个很好的介绍:+)回答得很好。有人需要将“如何避免选择”链接发送到Microsoft。谢谢-这正是它的内容。我想我确实记得现在在某处看到了新的Formula2/Formula2R1C1属性,但完全忘记了它们。现在肯定不会忘记他们的!这是一个非常清楚和有启发性的答案。上帝保佑你