VBA用其计算值替换函数公式内的范围

时间:2017-09-13 14:50:12

标签: excel vba excel-vba

这是我在这里的第一篇文章。我试图寻找答案但找不到答案。

我的问题是将公式中的范围替换为其特定值。 为了说明问题,请考虑一个单元格:

= AVERAGE(A1:A10)

我希望此单元格显示计算的平均参数:

= AVERAGE({1; 2; 3; 4; 5; 6; 7; 8; 9; 10})

此项与按F9并行,同时A1:A10范围突出显示。 我尝试用我在网上找到的东西来构建一些东西,但却无法使它工作:

Sub ChangeFormulas()
Const CONST_FUNCTION As String = "AVERAGE"
Dim cell As Range
Dim tmp As String
Dim res As Variant

For Each cell In Selection

  With cell

    If InStr(.Formula, CONST_FUNCTION) > 0 Then

        tmp = Mid(.Formula, 10, InStr(.Formula, ")") - (InStr(.Formula, CONST_FUNCTION) + 8))

        cell.Formula = Replace(cell.Formula, tmp, Application.Evaluate(tmp))
    End If
  End With
Next cell
End Sub

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

根据@Brandon Barney的说法,不能想到为什么,但这就是你所需要的

"=AVERAGE({" & join(application.transpose(range("i1:i4").Value),";") & "})"

哪个会像这样返回

=AVERAGE({1;5;5;10})