vba从范围到结束行插入数组公式?

时间:2016-12-21 14:41:58

标签: arrays excel vba

我正在尝试从第10行开始向下插入数组公式:

Request request = mock(Request.class);
when(event.request()).thenReturn(request);
when(request.getParam("type")).thenReturn("application/octet-stream");

由于某种原因,这不起作用,我得到一个对象所需的错误。 我也希望每一个细胞参考下降每一行。我是vba的新手,如果我的代码不是很好,那么道歉,但如果有人可以请我指出正确的方向,我真的很感激吗?

由于

1 个答案:

答案 0 :(得分:0)

您收到错误的原因是""为您需要使用""""的公式提供双引号。

然后你会以这种方式将公式输入L10:

ActiveSheet.Range("L10").FormulaArray = "=IF(J10<>"""",INDEX(Data!B:B,MATCH(1,(Home!H10=Data!C:C)*(Home!I10=Data!D:D)*(Home!J10=Data!E:E),0)),INDEX(Data!B:B,MATCH(1,(Home!H10=Data!C:C)*(Home!I10=Data!D:D)*(K10=Data!F:F),0)))"

然后填充下面的行使用Range.AutoFill

ActiveSheet.Range("L10").AutoFill .Range("L10:l100")

其中L10:L100是公式的放置范围。

所以:

Sub Check()
Dim lastrow As Long
Dim sht As Worksheet

Set sht = ActiveSheet
With sht
    lastrow = .Cells(.Rows.Count, 10).End(xlUp).Row

    .Range("L10").FormulaArray = "=IF(J10<>"""",INDEX(Data!B:B,MATCH(1,(Home!H10=Data!C:C)*(Home!I10=Data!D:D)*(Home!J10=Data!E:E),0)),INDEX(Data!B:B,MATCH(1,(Home!H10=Data!C:C)*(Home!I10=Data!D:D)*(K10=Data!F:F),0)))"
    .Range("L10").AutoFill ActiveSheet.Range("L10:L" & lastrow)
End With

End Sub

注意

如评论中所述,所有对数据数据集的完整列引用也需要更改为仅引用数据。

数组公式将迭代并计算整个引用。因此每个公式将进行超过800万次计算。将该公式输入的次数乘以,您可以看到这将如何影响计算时间,甚至可能导致您的Excel崩溃。