Việc trước tiên, a in đồ thị đó ra trên giấy (nhớ in cho lớn để nhìn cho rõ). Trên đồ thị vừa in ra giấy a chịu khó lập bảng tra 1 chiều theo thông số X và Y. Sau khi lập xong dùng hàm nội suy 1 chiều do các thành viên đã viết sẵn bỏ vào xài ----> giải quyết đúng theo y/c của a rồi đó. Code các hàm nội suy 1 chiều a có thể tham khảo dưới đây:
Function NS(table_array, Lookup_value)
Dim NumRows As Integer, i As Integer
Dim Max, Min
Dim Range1 As Range, Range2 As Range
NumRows = table_array.Rows.Count
Set Range1 = table_array.Columns(1)
Set Range2 = table_array.Columns(2)
If Lookup_value = Range1.Cells(NumRows) Then
NS = Range2.Cells(NumRows)
Exit Function
End If
Max = Range1.Cells(1)
Min = Range1.Cells(1)
For i = 1 To NumRows
If Max <= Range1.Cells(i) Then Max = Range1.Cells(i)
If Min >= Range1.Cells(i) Then Min = Range1.Cells(i)
Next i
If Lookup_value > Max Or Lookup_value < Min Then
NS = "Out of range" 'Evaluate("NA()")
Exit Function
End If
For i = 1 To NumRows - 1
If (Lookup_value >= Range1.Cells(i) And Lookup_value <= Range1.Cells(i + 1)) Or (Lookup_value <= Range1.Cells(i) And Lookup_value >= Range1.Cells(i + 1)) Then
If (Range1.Cells(i) - Range1.Cells(i + 1)) <> 0 Then
NS = (Range2.Cells(i + 1) + (Range2.Cells(i) - Range2.Cells(i + 1)) * (Lookup_value - Range1.Cells(i + 1)) / (Range1.Cells(i) - Range1.Cells(i + 1)))
Else
NS = Range2.Cells(i)
End If
Exit Function
End If
Next i
End Function
Function NoiSuy1(ByVal x1, x2, a1, a2, x3)
NoiSuy1 = a1 + ((a2 - a1) * (x3 - x1)) / (x2 - x1)
End Function
Function kp(ByVal x, y, bangtra As Range)
For i = 2 To UBound(bangtra.Value, 2)
For j = 2 To UBound(bangtra.Value, 1)
If (y = bangtra(1, i)) And (x = bangtra(j, 1)) Then
kp = bangtra(j, i)
End If
If (y = bangtra(1, i)) And (bangtra(j, 1) < x) And (x < bangtra(j + 1, 1)) Then
kp = NoiSuy1(bangtra(j, 1), bangtra(j + 1, 1), bangtra(j, i), bangtra(j + 1, i), x)
End If
If (x = bangtra(j, 1)) And (bangtra(1, i) < y) And (y < bangtra(1, i + 1)) Then
kp = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j, i), bangtra(j, i + 1), y)
End If
If (bangtra(j, 1) < x) And (x < bangtra(j + 1, 1)) And (bangtra(1, i) < y) And (y < bangtra(1, i + 1)) Then
a = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j, i), bangtra(j, i + 1), y)
b = NoiSuy1(bangtra(1, i), bangtra(1, i + 1), bangtra(j + 1, i), bangtra(j + 1, i + 1), y)
kp = NoiSuy1(bangtra(j, 1), bangtra(j + 1, 1), a, b, x)
End If
Next
Next
End Function