Hướng dẫn viết hàm nội suy một chiều khi vùng tham chiếu thay đổi theo vùng (1 người xem)

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

Nguyen.vuhoa1986

Thành viên mới
Tham gia
21/11/14
Bài viết
12
Được thích
3
Em chào các Anh (Chị) trong diễn đàn GPEX.
Em là sinh viên khoa công trình, hiện tại em đang phải làm một ứng dụng tin liên quan đến lập trình ứng dụng nền có liên quan đến bài toán nội suy mà chưa viết được code nên lên diễn đàn nhờ ANh chị giúp đỡ.
- Em có một cột Poi tăng dần theo chiều sâu ứng với các lớp ID khác nhau, dựa vào ID Poi sẽ dò tìm trong vùng dữ liệu bên sheet eoi~Poi tìm ra được giá trị eoi là bao nhiêu.\
Em mô tả hơi khó, mọi người xem file đính kèm rồi giúp em với ạ.
 

File đính kèm

Chủ đề này em theo dõi từ qua đến giờ vẫn chưa có ai giúp. Chắc tại em diễn giải làm mọi người khó hiểu hay sao vậy?
Ý tưởng của em đang nghĩ là dùng Hàm Match dò tìm dòng của ID vùng dữ liệu từ đó sẽ biết được từng vùng eoi~poi của từng ID. Sau đó kết hợp với hàm nội suy 1 chiều sẽ được, nhưng em viết mãi toàn báo lỗi..
 
Upvote 0
Em chào các Anh (Chị) trong diễn đàn GPEX.
Em là sinh viên khoa công trình, hiện tại em đang phải làm một ứng dụng tin liên quan đến lập trình ứng dụng nền có liên quan đến bài toán nội suy mà chưa viết được code nên lên diễn đàn nhờ ANh chị giúp đỡ.
- Em có một cột Poi tăng dần theo chiều sâu ứng với các lớp ID khác nhau, dựa vào ID Poi sẽ dò tìm trong vùng dữ liệu bên sheet eoi~Poi tìm ra được giá trị eoi là bao nhiêu.\
Em mô tả hơi khó, mọi người xem file đính kèm rồi giúp em với ạ.
Bạn có thể cho kết quả mong muốn (tính thủ công) vào cột Eoi được không?
Thân!
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn có thể cho kết quả mong muốn (tính thủ công) vào cột Eoi được không?
Thân!
Ví dụ như em dùng hàm nội suy một chiều trên diễn đàn:
Public Function noisuy1(vungtra As Range, x As Double, hang As Integer) As Double
'ham noi suy 1 chieu
Dim ktra As Boolean
Dim i As Integer
Dim x1 As Double, x2 As Double, y1 As Double, y2 As Double
For i = 1 To vungtra.Cells.Count
kiemtra = False
If vungtra.Cells(1, i) <= x And vungtra.Cells(1, i + 1) >= x Then
x1 = vungtra.Cells(1, i): x2 = vungtra.Cells(1, 1 + i)
y1 = vungtra.Cells(hang, i): y2 = vungtra.Cells(hang, i + 1)
noisuy1 = (y2 - y1) * (x - x1) / (x2 - x1) + y1
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 Function
Dựa vào hàm này em làm thủ công tại Ô E2 =noisuy1('eoi~poi'!$C$2:$J$3,D2,2) =0.9618
Tại Ô E6 = noisuy1('eoi~poi'!$C$4:$J$5,D6,2) =1.13735
- Như vậy vùng bôi đỏ sẽ tự động dịch chuyển khi Id Lớp thay đổi và dò tìm nội suy kết quả.
Mong Anh (Chị) giúp đỡ!!!
Trân Trọng,
 
Upvote 0
Ví dụ như em dùng hàm nội suy một chiều trên diễn đàn:

Dựa vào hàm này em làm thủ công tại Ô E2 =noisuy1('eoi~poi'!$C$2:$J$3,D2,2) =0.9618
Tại Ô E6 = noisuy1('eoi~poi'!$C$4:$J$5,D6,2) =1.13735
- Như vậy vùng bôi đỏ sẽ tự động dịch chuyển khi Id Lớp thay đổi và dò tìm nội suy kết quả.
Mong Anh (Chị) giúp đỡ!!!
Trân Trọng,
Bạn xem thử file này.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Hàm này dùng cho bảng dữ liệu dạng cột.
Dữ liệu trong File trên dạng hàng nên phải chỉnh lại mới dùng được.
Bạn xem thử file này.
Hàm trên vẫn được đấy chứ Anh.
Ví dụ: =noisuy1(OFFSET('eoi~poi'!$C$1,LOOKUP(100,$A$2:A2,$A$2:A2)*2-1,,2,8),D2,2).
Cảm ơn Anh, trước khi em đọc được hàm anh viết thì em đang nghĩ theo hướng viết hàm match hoặc find để thay thế vùng này: OFFSET('eoi~poi'!$C$1,LOOKUP(100,$A$2:A2,$A$2:A2)*2-1,,2,8) nhưng chưa được!!
 
Upvote 0

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

Back
Top Bottom