在Excel中使用自定义函数的#Value错误

时间:2017-04-05 17:45:01

标签: excel excel-vba function add-in user-defined-functions vba

当我尝试调用自定义函数时,我收到了#VALUE错误。它应该做的只是一些数学。有谁看到这里可能有什么问题?

我从互联网上复制了这个:

来源:

  

http://www.engineerexcel.com/linear-interpolation-vba-function-in-excel/

$_POST

这是我认为工作表函数调用可能导致错误的简化版本:

Function LININTERP(x, xvalues, yvalues)

'x and y values must be in ascending order from top to bottom.
'x must be within the range of available data.

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(yvalues, Application.WorksheetFunction.Match(x, xvalues, 1))
y2 = Application.WorksheetFunction.Index(yvalues, Application.WorksheetFunction.Match(x, xvalues, 1) + 1)

LININTERP = y1 + (y2–y1) * (x–x1) / (x2–x1)
End Function

我在不相关的工作簿中的测试数据: (全部格式化为"一般")

Function LININTERP(x, x1, x2, y1, y2)
  LININTERP = y1 + (y2–y1) * (x–x1) / (x2–x1)
End Function

只需将实际数学插入单元格即可按预期工作。调用该函数会引发#VALUE错误。

我的函数保存在我保存的工作簿中的模块中,并作为加载项添加到Excel中。

1 个答案:

答案 0 :(得分:3)

我对你的公式和数据的抽样在连字符上引起错误,而不是被解释为“减号”。实际上,它们作为unicode 8211出现。重新打印它们,将vars声明为变体并删除import java.util.*; class Try { public static void main(String args[]) { Scanner sc=new Scanner(System.in); while(true) { try{ System.out.println("Enter a no "); int s=Integer.parseInt(sc.next()); // or sc.nextLine() if you wish to get multi digit numbers }catch(Exception e) { System.out.println("Invalid input try again"); } } } } 解决了问题。

...WorksheetFunction...

enter image description here

故事的道德:不要相信你在互联网上找到的一切。