Giúp viết hàm tra bảng và nội suy giá trị

Liên hệ QC

thao_tedi

Thành viên mới
Tham gia
14/2/09
Bài viết
14
Được thích
3
Em có một bài toán như sau: Trong sheet Ref có một bảng 2 chiều một chiều là vận tốc (V), một chiều là siêu cao (e), giá trị bên trong bảng là bán kính (R) của đường cong tròn. Em muốn lập một hàm CalE có thể tính với R và V nhập vào có thể tự động tra ra siêu cao. Nếu R và V bằng với các giá trị trong bảng thì e bằng luôn giá trị có sẵn. Trong trường hợp R khác các giá trị trong bảng thì có thể tính siêu cao e bằng cách nội suy tuyến tính giá trị của e giữa 2 giá trị gần nhất của bán kính. Ví dụ với vận tốc 50 km/h thì ứng với R = 458m có e = 3.2%, R = 496m có e = 3.0%. Tuy nhiên khi cần tính với V = 50Km/h và R = 470m thì ta tự động nội suy tuyến tính giữa R = 458m và R = 496 m (nếu tính thủ công thì ở đây ứng với V = 50km/h, R = 470m thì e = (496-470)*(3.2-3.0)/(496-458) + 3.0 = 3.136 %
File bảng mẫu e có đính kèm ở đây.
Mong các bác cố gắng giúp em.
Em xin chân thành cảm ơn các bác nhiều. Chúc các bác mạnh khỏe!
 

File đính kèm

Em viết lại đi, hàm o tra được gì cả........mà tra bảng nội suy 2 chiều có rất nhiều trong gpexcell.com rùi, e lấy về mà tham khảo o cần phải sáng tác thêm đâu.
 
Upvote 0
Em đã viết được một hàm để tra rồi, nhưng không hiểu sao không chạy được. Mã code của hàm như sau. Mong các bác có nhiều kinh nghiệm kiểm tra giúp em. File excel em attach dưới đây. Ngoài ra em dùng excel 2007, không biết cái này có ảnh hưởng gì đến việc không chạy được không!
Em xin chân thành cảm ơn. Chúc các bác luôn mạnh khỏe!

Function CalE(vungtra As Range, R As Double, V As Double) As Double
'Ham noi suy gia tri e tu R va V cho truoc
Dim ktra As Boolean
Dim i As Integer
Dim r1 As Double, r2 As Double, e1 As Double, e2 As Double
For i = 1 To vungtra.Cells.Count
kiemtra = False
Select Case V
Case V = 20
If vungtra.Cells(i, 2) >= R And vungtra.Cells(i + 1, 2) <= R Then
r1 = vungtra.Cells(i, 2): r2 = vungtra.Cells(i + 1, 2)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 30
If vungtra.Cells(i, 3) >= R And vungtra.Cells(i + 1, 3) <= R Then
r1 = vungtra.Cells(i, 3): r2 = vungtra.Cells(i + 1, 3)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 40
If vungtra.Cells(i, 4) >= R And vungtra.Cells(i + 1, 4) <= R Then
r1 = vungtra.Cells(i, 4): r2 = vungtra.Cells(i + 1, 4)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 50
If vungtra.Cells(i, 5) >= R And vungtra.Cells(i + 1, 5) <= R Then
r1 = vungtra.Cells(i, 5): r2 = vungtra.Cells(i + 1, 5)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 60
If vungtra.Cells(i, 6) >= R And vungtra.Cells(i + 1, 6) <= R Then
r1 = vungtra.Cells(i, 6): r2 = vungtra.Cells(i + 1, 6)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 70
If vungtra.Cells(i, 7) >= R And vungtra.Cells(i + 1, 7) <= R Then
r1 = vungtra.Cells(i, 7): r2 = vungtra.Cells(i + 1, 7)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 80
If vungtra.Cells(i, 8) >= R And vungtra.Cells(i + 1, 8) <= R Then
r1 = vungtra.Cells(i, 8): r2 = vungtra.Cells(i + 1, 8)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 90
If vungtra.Cells(i, 9) >= R And vungtra.Cells(i + 1, 9) <= R Then
r1 = vungtra.Cells(i, 9): r2 = vungtra.Cells(i + 1, 9)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 100
If vungtra.Cells(i, 10) >= R And vungtra.Cells(i + 1, 10) <= R Then
r1 = vungtra.Cells(i, 10): r2 = vungtra.Cells(i + 1, 10)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 110
If vungtra.Cells(i, 11) >= R And vungtra.Cells(i + 1, 11) <= R Then
r1 = vungtra.Cells(i, 11): r2 = vungtra.Cells(i + 1, 11)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 120
If vungtra.Cells(i, 12) >= R And vungtra.Cells(i + 1, 12) <= R Then
r1 = vungtra.Cells(i, 12): r2 = vungtra.Cells(i + 1, 12)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
Case V = 130
If vungtra.Cells(i, 13) >= R And vungtra.Cells(i + 1, 13) <= R Then
r1 = vungtra.Cells(i, 13): r2 = vungtra.Cells(i + 1, 13)
e1 = vungtra.Cells(i, 1): e2 = vungtra.Cells(i + 1, 1)
CalE = (e2 - e1) * (r1 - R) / (r1 - r2) + e1
ktra = True
End If
Next i
If ktra = False Then
MsgBox "gia tri can tim ko nam trong bang tra", vbInformation
Exit Function
End If
End Select
End Function
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom