Công thức tính hệ số nội suy ?

Liên hệ QC

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,468
Nghề nghiệp
Công chức
Tôi có file tính hệ số nội suy, công thức trong kết quả đã được lập theo đúng công thức tổng quát và đã cho kết quả đúng nhưng tôi thấy nó dài quá. Nhờ các Bạn viết giúp công thức cho gọn hơn. Thanks !
 

File đính kèm

  • Cong thuc noi suy.rar
    2.6 KB · Đọc: 410
=HLOOKUP($C8;$C$4:$H$5;2;1)-(HLOOKUP($C8;$C$4:$H$5;2;1)-OFFSET($C$5;0;MATCH($C8;$C$4:$H$4;1)))*(C8-H8)/(OFFSET($C$4;0;MATCH($C8;$C$4:$H$4;1))-HLOOKUP($C8;$C$4:$H$5;1;1))

Còn khoảng 1/2 chiều dài.

Có lẽ vẫn còn có thể rút gọn hơn. Anh xem file. Sử dụng thêm 1 giá trị 0
Các cột phụ là nháp để anh xem cho dễ (xem xong xoá), cột cuối là công thức chính.
 

File đính kèm

  • Cong thuc noi suy.xls
    25.5 KB · Đọc: 219
Lần chỉnh sửa cuối:
Bạn thử xài công thức này

=IF($J4<=NTi,0.64,IF($J4<=ChT,0.64-((0.64-0.43)*($J4-NTi))/NTi,IF($J4<=N0Ti,0.43-((0.43-0.3)*($J4-ChT))/B0T,IF($J4<=TrTi,0.3-((0.3-0.23)*($J4-N0Ti))/N0Ti,IF($J4<=N00Ti,0.23-((0.23-0.13)*($J4-TrTi))/B0T*10,0)))))
 
Mình làm hàm tự tạo để tính:
 

File đính kèm

  • Cong thuc noi suy_1.xls
    33 KB · Đọc: 87
Lần chỉnh sửa cuối:
Mình làm hàm tự tạo để tính:
Cũng có thể như vầy, gọn xíu í mà! :
PHP:
Option Explicit
Function NoiSuy(N As Currency)
 Dim J As Integer
 For J = 2 To 6
    With Cells(4, J)
        If .Value <= N And .Offset(, 1).Value >= N Then
            NoiSuy = .Offset(1) + ((N - .Value) * (.Offset(1, 1) - .Offset(1))) / (.Offset(, 1) - .Value)
            Exit Function
        End If
    End With
 Next
End Function
 
Nếu dùng hàm tự tạo, tôi sẽ viết hàm với 3 tham số:

Function Noisuy(XNum As Double, XRng As Range, YRng As Range) As Double

Như vậy, có thể dùng hàm với 2 dãy số tại bất kỳ vị trí nào và kích thước bao nhiêu.
 
PHP:
Function Noisuy(XNum As Double, XRng As Range, YRng As Range) As Double
If XNum = 0 Then Noisuy = 0: Exit Function
Dim KnownX, KnownY, i, k
k = 1
ReDim KnownX(1 To XRng.Count)
ReDim KnownY(1 To XRng.Count)
For Each Cll In XRng
    KnownX(k) = Cll.Value
    k = k + 1
Next
k = 1
For Each Cll In YRng
    KnownY(k) = Cll.Value
    k = k + 1
Next
        For i = 1 To XRng.Count
            If KnownX(i) <= XNum And KnownX(i + 1) >= XNum Then
                Noisuy = KnownY(i) + ((XNum - KnownX(i)) * _
                (KnownY(i + 1) - KnownY(i))) / (KnownX(i + 1) - KnownX(i))
                Exit Function
            End If
        Next
End Function
 

File đính kèm

  • UDF noi suy.xls
    42.5 KB · Đọc: 94
=IF($J4<=NTi,0.64,IF($J4<=ChT,0.64-((0.64-0.43)*($J4-NTi))/NTi,IF($J4<=N0Ti,0.43-((0.43-0.3)*($J4-ChT))/B0T,IF($J4<=TrTi,0.3-((0.3-0.23)*($J4-N0Ti))/N0Ti,IF($J4<=N00Ti,0.23-((0.23-0.13)*($J4-TrTi))/B0T*10,0)))))

Thầy ơi chữ màu đỏ có phải là Name không ạ ?

Cảm ơn các bạn ! các phương án các bạn đưa ra đều cho kết quả đúng nhưng tôi chưa kịp hiểu, tôi sẽ nghiên cứu từng PA nếu có gì chưa hiểu sẽ nhờ các bạn chỉ giáo tiếp.
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom