#Value 在 Excel 中使用自定义函数时出错
#Value error using custom function in Excel
当我尝试调用我的自定义函数时出现#VALUE 错误。它应该做的只是一些数学运算。有没有人看到这里可能出了什么问题?
我从网上复制了这个:
来源:
http://www.engineerexcel.com/linear-interpolation-vba-function-in-excel/
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
我在一个不相关的工作簿中的测试数据:
(所有格式为 "General")
A1: 633
A2: 634
B1: 14.968
B2: 15.024
C1 (my x): 633.6
只需将实际数学运算插入单元格即可按预期工作。调用该函数会引发 #VALUE 错误。
我的函数保存在工作簿的一个模块中,我已经保存并作为加载项添加到 Excel。
我对您的公式和数据的抽样在连字符上出现错误,未被解释为 'minus signs'。事实上,它们以 unicode 8211 出现。重新键入它们,将 vars 声明为变体并删除 ...WorksheetFunction...
解决了问题。
Function LININTERP(x, xvalues, yvalues)
Dim x1 As Variant, x2 As Variant, y1 As Variant, y2 As Variant
'x and y values must be in ascending order from top to bottom.
'x must be within the range of available data.
x1 = Application.Index(xvalues, Application.Match(x, xvalues, 1))
x2 = Application.Index(xvalues, Application.Match(x, xvalues, 1) + 1)
y1 = Application.Index(yvalues, Application.Match(x, xvalues, 1))
y2 = Application.Index(yvalues, Application.Match(x, xvalues, 1) + 1)
LININTERP = y1 + (y2 - y1) * (x - x1) / (x2 - x1)
End Function
故事的寓意:不要相信您在 Internet 上找到的所有内容。
当我尝试调用我的自定义函数时出现#VALUE 错误。它应该做的只是一些数学运算。有没有人看到这里可能出了什么问题?
我从网上复制了这个:
来源:
http://www.engineerexcel.com/linear-interpolation-vba-function-in-excel/
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
我在一个不相关的工作簿中的测试数据: (所有格式为 "General")
A1: 633
A2: 634
B1: 14.968
B2: 15.024
C1 (my x): 633.6
只需将实际数学运算插入单元格即可按预期工作。调用该函数会引发 #VALUE 错误。
我的函数保存在工作簿的一个模块中,我已经保存并作为加载项添加到 Excel。
我对您的公式和数据的抽样在连字符上出现错误,未被解释为 'minus signs'。事实上,它们以 unicode 8211 出现。重新键入它们,将 vars 声明为变体并删除 ...WorksheetFunction...
解决了问题。
Function LININTERP(x, xvalues, yvalues)
Dim x1 As Variant, x2 As Variant, y1 As Variant, y2 As Variant
'x and y values must be in ascending order from top to bottom.
'x must be within the range of available data.
x1 = Application.Index(xvalues, Application.Match(x, xvalues, 1))
x2 = Application.Index(xvalues, Application.Match(x, xvalues, 1) + 1)
y1 = Application.Index(yvalues, Application.Match(x, xvalues, 1))
y2 = Application.Index(yvalues, Application.Match(x, xvalues, 1) + 1)
LININTERP = y1 + (y2 - y1) * (x - x1) / (x2 - x1)
End Function
故事的寓意:不要相信您在 Internet 上找到的所有内容。