使用VBA定义的数组将公式应用于单元格

时间:2016-08-25 16:33:22

标签: arrays excel vba excel-vba

实现此代码尝试的方法肯定更简单,但我创建了一个简化的代码来展示我想要实现的目标。基本上我想对大量数据进行计算,我不想将其添加到工作表中。

所以基本上我需要通过使用我在宏中定义的数组在工作表中运行sum,averageifs等公式。此时我无法弄清楚如何将包含5个值的数组转换为“= sum()”函数。在此先感谢您的帮助!

Sub ArraySum()

Dim numbers(5) As Double
Dim E As Double

For I = 1 To 5
    E = Cells(I, 1)
    numbers(I) = Cos(E)
Next I

Range("b1").Formula = "=sum(" & numbers & ")"

End Sub

3 个答案:

答案 0 :(得分:2)

不清楚你为什么要这样做,但是:

Sub ArraySum()

    Dim numbers(1 To 5) '<<<
    Dim E As Double

    For I = 1 To 5
        E = Cells(I, 1)
        numbers(I) = Cos(E)
    Next I

    Range("B1").Formula = "=SUM(" & Join(numbers, ",") & ")"

End Sub

但是你可以这样做:

Range("B1").FormulaArray = "=SUM(COS(A1:A5))"

答案 1 :(得分:0)

另一种方法,如果你不需要公式实际上在那个单元格中:

Range("b1").Value = Application.WorksheetFunction.Sum(numbers)

修改:如果您尚未设置Option Base 1,那么Dim numbers(3) As Double将创建一个4元素数组(0),...,数字(3),因为默认值为{{ 1}}。我建议使用Base 0而不是依赖Base选项。

编辑2:您在示例中忘记了Dim numbers(1 to 3) As Double,或者没有使用Dim I,这是非常推荐的!

答案 2 :(得分:0)

它必须是工作表中的等式吗?你可以得到总数并把它放在那里:

Sub ArraySum()

    Dim numbers(1 To 5) '<<<
    Dim E As Double

    For I = 1 To 5
        E = Cells(I, 1)
        numbers(I) = Cos(E)
    Next I

    Range("B1").Value = Application.WorksheetFunction.Sum(numbers)
End Sub