Public MyArray As Variant
Function HInterpolate(Myrange As Range)
HInterpolate = ""
If InStr(Myrange.Address, ":") = 0 Then GoTo skip2
Rangein = Split(Replace(Myrange.Address, ":", ""), "$")
If Rangein(1) = Rangein(3) Then GoTo skip2
If Myrange.Column = Application.Caller.Column Then
MyArray = Application.Transpose(Application.Transpose(Myrange.Value))
FillLoop:
For Pos = 1 To UBound(MyArray)
If MyArray(Pos) = "" Then Exit For
Next
If Pos >= UBound(MyArray) Then GoTo Skip1
For Pos2 = Pos + 1 To UBound(MyArray)
If MyArray(Pos2) <> "" Then Exit For
Next
If Pos2 = UBound(MyArray) And MyArray(Pos2) = "" Then GoTo Skip1
Variation = (MyArray(Pos2) - MyArray(Pos - 1)) / (Pos2 - Pos + 1)
For Fill = Pos To Pos2 - 1
MyArray(Fill) = MyArray(Fill - 1) + Variation
Next
GoTo FillLoop
Skip1:
HInterpolate = MyArray(1)
Else
HInterpolate = MyArray(Application.Caller.Column - Myrange.Column + 1)
End If
skip2:
'Exit Function
End Function
Function Interpolate(Myrange As Range)
Interpolate = ""
If InStr(Myrange.Address, ":") = 0 Then GoTo skip2
Rangein = Split(Replace(Myrange.Address, ":", ""), "$")
If Rangein(2) = Rangein(4) Then GoTo skip2
If Myrange.Row = Application.Caller.Row Then
MyArray = Application.Transpose(Myrange.Value)
FillLoop:
For Pos = 1 To UBound(MyArray)
If MyArray(Pos) = "" Then Exit For
Next
If Pos >= UBound(MyArray) Then GoTo Skip1
For Pos2 = Pos + 1 To UBound(MyArray)
If MyArray(Pos2) <> "" Then Exit For
Next
If Pos2 = UBound(MyArray) And MyArray(Pos2) = "" Then GoTo Skip1
Variation = (MyArray(Pos2) - MyArray(Pos - 1)) / (Pos2 - Pos + 1)
For Fill = Pos To Pos2 - 1
MyArray(Fill) = MyArray(Fill - 1) + Variation
Next
GoTo FillLoop
Skip1:
Interpolate = MyArray(1)
Else
Interpolate = MyArray(Application.Caller.Row)
End If
skip2:
'Exit Function
End Function
Bookmarks