dynamicselect线性插值

我有一个函数,我叫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 

我希望函数自动select所有的x值和所有的y值,而不必手动调整。 我可以有10个X和Y值,或100。该function工作正常,但我必须手动调整select。

我拿了2张截图。

正确的选择

我想要避免的

你只需要定义两个dynamic调整的命名范围 。 添加一个命名的范围,比如x_values ,并通过定义它

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

y_values执行相同的y_values ,将引用更改为F列

 =LinInterp(D1;x_values;y_values) 

注意,你的图片使用了函数LinInterp而你的代码使用了InterpolLinear函数,所以只要确保你是一致的


另外,您可以更简单地分配variables,例如:

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