【问题标题】:Excel VBA - Assigning Variable to a User-Defined Formula Located in Some Cell RangeExcel VBA - 将变量分配给位于某个单元格范围内的用户定义公式
【发布时间】:2018-08-16 20:26:19
【问题描述】:

在一张纸的 Cell(1,1) 中,我有这个公式: 5 * a ^ 2 + 3 * a ^ 1 + 1 * a + 5

在同一张表的 Cell(2,1) 中,我有另一个公式: 3 * b ^ 2 + 5 * b ^ 1 + 1 * b + 3

Screenshot of the formulas

我想计算这些公式的值并将其分配给 VBA 中的变量。例如,我一直在尝试这样的事情

Function calculate_y(a,b)

answer1 = [A1]
answer2 = [A2]

calculate_y = answer1 + answer2 

End Function  

但我不断收到错误。我尝试过使用 Evaluate() 和 & 之类的字符,但无济于事。我不直接将公式输入 vba 的原因是因为这些公式会发生变化。我不想手动更新公式。

【问题讨论】:

  • answer1 = [A1] 正在评估单元格 A1 并将 其结果 分配给 answer1 本地 [/undeclared] 变量;我想你会想要answer1 = [A1].Formula

标签: vba excel


【解决方案1】:

使用提供的值替换字符串中的变量时使用评估:

Function calculate_y(a, b)

With Application.Caller.Parent
    answer1 = .Evaluate(Replace(.Range("A1"), "a", a))
    answer2 = .Evaluate(Replace(.Range("A2"), "b", b))
End With

calculate_y = answer1 + answer2

End Function


如果您不打算将其用作 UDF,而是从 vba 调用它,您还应该传递公式所在的工作表:

Function calculate_y(ws As Worksheet, a As Double, b As Double)

With ws
    answer1 = .Evaluate(Replace(.Range("A1"), "a", a))
    answer2 = .Evaluate(Replace(.Range("A2"), "b", b))
End With

calculate_y = answer1 + answer2

End Function

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 2017-10-12
    相关资源
    最近更新 更多