Công thức tính hệ số nội suy ? (5 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,470
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

=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

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

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

=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

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

Back
Top Bottom