簡體   English   中英

在Excel中使用自定義功能導致#Value錯誤

[英]#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

我的測試數據在一個不相關的工作簿中:(全部格式化為“常規”)

A1: 633
A2: 634
B1: 14.968
B2: 15.024
C1 (my x): 633.6

只需將實際的數學運算插入單元格即可。 調用該函數將引發#VALUE錯誤。

我的功能保存在工作簿的模塊中,該模塊已保存並作為外接程序添加到Excel。

我對公式和數據的采樣導致連字符出現錯誤,連字符沒有被解釋為“減號”。 實際上,它們以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

在此處輸入圖片說明

故事的寓意:不要相信在互聯網上找到的所有內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM