Function Interpolation(r0 As Range, anbase As Range, r1 As Range, r2 As Range, r3 As Range)
Dim k As Long, p As Long
Dim ra0 As Long
Dim ra1()
Dim ra3()
Dim ra5()
Application.Volatile False
ra0 = r0
ra1 = r1.Value
ra3 = Union(r3, r3.Offset(0, 1)).FormulaLocal
ra5 = Range(Cells(5, r2.Column), Cells(5, 22)).Value
If ra1(1, 2) <> "" Then[INDENT]If ra1(1, 1) <> "" Then[/INDENT]
[INDENT=2]If ra1(1, 1) = ra5(1, 2) Then[/INDENT]
[INDENT=3]Interpolation = ra1(1, 2)[/INDENT]
[INDENT=3]Exit Function[/INDENT]
[INDENT=2]ElseIf ra1(1, 1) > ra5(1, 2) Then[/INDENT]
[INDENT=3]p = ra1(1, 1)[/INDENT]
[INDENT=2]End If[/INDENT]
[INDENT]Else[/INDENT]
[INDENT=2]If ra0 = ra5(1, 2) Then[/INDENT]
[INDENT=3]Interpolation = ra1(1, 2)[/INDENT]
[INDENT=3]Exit Function[/INDENT]
[INDENT=2]ElseIf ra0 > ra5(1, 2) Then[/INDENT]
[INDENT=3]p = ra0[/INDENT]
[INDENT=2]End If[/INDENT]
[INDENT]End If[/INDENT]
End If
For k = 1 To UBound(ra3, 2) - 2[INDENT]If p > ra5(1, k + 1) Or p = 0 Then
[/INDENT]
[INDENT=2]If Not ra3(1, k) Like "=*" Then
[/INDENT]
[INDENT=3]Interpolation = r2 + (ra3(1, k) - r2) / (k + 1)
Exit Function[/INDENT]
[INDENT=2]End If[/INDENT]
[INDENT] ElseIf p > 0 Then
[/INDENT]
[INDENT=2]Interpolation = r2 + (ra1(1, 2) - r2) / k
Exit Function[/INDENT]
[INDENT] End If[/INDENT]
Next k
If p > 0 Then[INDENT]Interpolation = r2 + (ra1(1, 2) - r2) / (p - ra5(1, 1))[/INDENT]
Else[INDENT]Interpolation = r2[/INDENT]
End If
End Function