线性插值的动态选择

时间:2017-03-21 10:59:53

标签: excel vba excel-vba dynamic excel-formula

我有一个功能,我称之为InterpolLinear

Function InterpolLinear(x, xvalues, yvalues)

    x1 = Application.WorksheetFunction.Index(xvalues, Application.WorksheetFunction.Match(x, xvalues, 1))

    x2 = Application.WorksheetFunction.Index(xvalues, Application.WorksheetFunction.Match(x, xvalues, 1) + 1)

    y1 = Application.WorksheetFunction.Index(xvalues, Application.WorksheetFunction.Match(y, xvalues, 1))

    y2 = Application.WorksheetFunction.Index(xvalues, Application.WorksheetFunction.Match(y, xvalues, 1) + 1)

    InterpolLinear = y1 + (y2 - y1) * (x - x1) / (x2 - x1)

EndFunction

我希望该功能能够自动选择所有x值和所有y值,而无需手动调整。我可以有10个x和y值,或者100。该功能正常,但我必须手动调整选择。

我拍了两张截图。

Correct Selection

what i want to avoid

1 个答案:

答案 0 :(得分:1)

您只需要定义两个动态调整的命名范围。添加命名范围,例如x_values并按

定义
=$E$1:INDEX($E:$E;MATCH(1000000;$E:$E;1))

y_values执行相同操作,更改对F列的引用。然后

=LinInterp(D1;x_values;y_values)

请注意,您的图片使用了LinInterp函数,而您的代码使用了函数InterpolLinear,所以只需确保您的一致

此外,您可以更简单地分配变量,例如:

 x1 = xvalues.Cells(Application.Match(x, xvalues, 1),1).Value