【问题标题】:How to insert array formula into Excel via VBA?如何通过 VBA 将数组公式插入 Excel?
【发布时间】:2017-12-27 07:47:23
【问题描述】:

以前我有一个 Excel VBA 代码,它为表中的整个列执行从一张到另一张的索引和匹配公式。代码示例如下:

With Me.Range("table1[Description]")
    .Formula = "=IFerror(INDEX(table2,MATCH(B4,table2[Asset No],0),2),"""")"
    .Value = .Value
 End With

现在我想在工作表中添加一个数组函数,因此我复制了公式并将旧公式替换为数组以及其他修改。

Sub refresh()

With Me.Range("table1[Last Service Date]")
    .FormulaArray = "=LARGE(IF(table2[[#All],[Asset No]]=[@[Asset No]],table2[[#All],[Entry Date]]),2)"
    .Value = .Value
End With

End Sub

但是当我尝试测试代码时,我不断收到错误消息 400。 我需要在我的代码中更改数组公式的任何内容吗?

【问题讨论】:

  • 当然在我指向的任何单元格上因为你使用Selection
  • oops.. 抱歉,不小心使用了我的旧测试代码。我会在适当的地方编辑。
  • 您改写了 [previous question][1] 很好(现在我了解您的后续问题),但需要更多信息。错误消息的其余部分是什么,它发生在哪一行?您确定Me.Range("table1[Last Service Date]") 是有效范围吗?如果您尝试在其中放置一个“常规”公式,例如.Formula="1+1",会发生什么情况?还有,.Value = .Value的目的是什么?
  • 很高兴得到澄清:p。无论如何Me.Range("table1[Last Service Date]") 至少对公式有效。因为当我用 1+1 公式替换数组时,整列自动按预期创建 2。至于.value = .value ,它是一种仅将公式更改为值的方法。我不需要将公式保留在表格中。
  • 错误信息也只是说400。就是这样。导致它的行位于.FormulaArray

标签: arrays vba excel


【解决方案1】:

在代码中使用 Me 有什么意义?您是否将该代码放在工作表模块中?我建议您将此代码移到像 Module1 这样的标准模块上,并将 Me 关键字替换为适当的工作表引用。否则,我希望您有充分的理由将该代码放入工作表模块中。

您还应该将数组公式放在表格的第一个单元格中所需的列中,并且由于数据被格式化为 Excel 表格,整个列将自动填充公式。如果没有,您可以使用 AutoFill 属性将公式向下填充。

试一试,看看是否能解决您的问题。 答案假定您尝试通过 VBA 放置的公式在您手动放在工作表上时效果很好。

With Me.Range("table1[Last Service Date]").Cells(1)
    .FormulaArray = "=LARGE(IF(table2[[#All],[Asset No]]=[@[Asset No]],table2[[#All],[Entry Date]]),2)"
    .Value = .Value
End With

【讨论】:

  • 其实给数组公式指定整个目标范围比指定第一个单元格然后向下复制效率更高。
  • 我认为这行不通。您是否尝试过通过 VBA 将数组公式实现到整个范围?
  • 是的,我做到了。 Excel 2010。ArrRng.FormulaArray = "=MINVERSE(" & DataRange & ")"
猜你喜欢
  • 2015-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多