我试图插入的数据如下所示:
=X=
0
0
0
0
0
0.5
1
3.1
5.5
6.2
8.5
=Y=
0.019607843
0.019607843
0.019607843
0.019607843
0.019607843
0.117647059
0.137254902
0.156862745
0.176470588
0.196078431
0.215686275
=Z=
0.019607843
0.039215686
0.058823529
0.078431373
0.098039216
0.117647059
0.137254902
0.156862745
0.176470588
0.196078431
0.215686275
0.235294118
我正在使用http://www.xlxtrfun.com/XlXtrFun/XlXtrFun.htm插件。在一个单元格中,我有这个插件的插值公式,除了这个特定的数据集外,它大部分时间都能正常工作。
AM1 中的我有以下代码:
=内插($ F $ 2:$ F $ 51 $ d $ 2:$ d $ 51 M2,TRUE,FALSE)
其中列F是Y数据D是X数据,M是Z
问题在于,在X组数据中,连续值为0,因此在具有公式的单元格中,我得到 #NUM!
我尝试将0稍微改为0.1 0.2等,之后它正常工作,所以我知道公式是正确的,但是有了这些数据,我无法改变它,或者它会在最后彻底改变结果。那么有谁知道我可以保留这些值并保持正确插值的方法吗?
答案 0 :(得分:1)
对于线性插值,我认为这个公式有效(适当时复制):
= INDEX(F$6:F$16,MATCH(M6,D$6:D$16))+
(M6-INDEX(D$6:D$16,MATCH(M6,D$6:D$16)))*INDEX(F$6:F$16,MATCH(M6,D$6:D$16)+1)-
INDEX(F$6:F$16,MATCH(M6,D$6:D$16)))/(INDEX(D$6:D$16,MATCH(M6,D$6:D$16)+1)-
INDEX(D$6:D$16,MATCH(M6,D$6:D$16)))
如果确实如此,可以完全归功于Jon Peltier(否则责备全是我的!)
答案 1 :(得分:1)
在任何情况下,如果你想尝试以上公式作为VBA功能(以保持你的表清洁)...你可以尝试以下。也许这是我不想写更多代码的一天;)所以它在我的最后工作。如果它适合你,那么所有感谢Tushar Mehta LOL我只是从@pnuts复制了那个标记行。但是在上面的网站中你有更多与interpol相关的代码。也试一试。
Option Explicit
Option Compare Text
Function RealEqual(X, Y) As Boolean
RealEqual = Abs(X - Y) <= 0.00000001
End Function
Function LinearInterp(XVals, YVals, TargetVal)
Dim MatchVal
On Error GoTo ErrXit
With Application.WorksheetFunction
MatchVal = .Match(TargetVal, XVals, 1)
If MatchVal = XVals.Cells.Count _
And RealEqual(TargetVal, .Index(XVals, MatchVal)) Then
LinearInterp = .Index(YVals, MatchVal)
Else
LinearInterp = .Index(YVals, MatchVal) _
+ (.Index(YVals, MatchVal + 1) - .Index(YVals, MatchVal)) _
/ (.Index(XVals, MatchVal + 1) _
- .Index(XVals, MatchVal)) _
* (TargetVal - .Index(XVals, MatchVal))
End If
End With
Exit Function
ErrXit:
With Err
LinearInterp = .Description & "(Number= " & .Number & ")"
End With
End Function
工作表视图: