Nội suy giá trị theo điều kiện cho trước

Liên hệ QC

lhlaptecco5

Thành viên mới
Tham gia
31/3/07
Bài viết
12
Được thích
0
Mình có 1 bài toán thế này, nhờ cả nhà giúp đỡ: Nội suy giá trị Cv tương ứng với loại đất
Mình có sử dụng hàm If và lồng các hàm khác, nhưng chỉ được cho 4 lớp đất. khi tăng lên 5 lớp đất thì vượt quá cấp cho phép của hàm If. (thực tế có rất nhiều lớp đất)

Thực tình mình không muốn dùng VBA (cũng ko rành lắm :) ), bởi vì mỗi khi gửi file thì cần phải addins, hoặc hay bị virus.

Bạn nào có cách hay xin hướng dẫn giúp. cảm ơn nhiều!

@ Mình có gửi kèm theo file
View attachment Tra Cv.rar
 
Iêu cầu của bạn chắc chờ lâu lắm đó!

(/ì rằng không fải bổng dưng mà ở rất nhiều diễn đàn người ta đưa ra những hàm tự tạo khác nhau để nội suy tùm lum chiều cho tùm lum trường hợp riêng rẽ!

Còn nội suy theo điều kiện cho trước nữa chứ!, chắc chờ Tết quá!

Mình khuyên bạn nên chấp nhận sống chung với UDF, nếu không bạn sẽ bị lạc lõng!
 
Mình có 1 bài toán thế này, nhờ cả nhà giúp đỡ: Nội suy giá trị Cv tương ứng với loại đất
Mình có sử dụng hàm If và lồng các hàm khác, nhưng chỉ được cho 4 lớp đất. khi tăng lên 5 lớp đất thì vượt quá cấp cho phép của hàm If. (thực tế có rất nhiều lớp đất)

Thực tình mình không muốn dùng VBA (cũng ko rành lắm :) ), bởi vì mỗi khi gửi file thì cần phải addins, hoặc hay bị virus.

Bạn nào có cách hay xin hướng dẫn giúp. cảm ơn nhiều!

@ Mình có gửi kèm theo file
View attachment 116028
Bạn làm như sau

- Bước 1: Đặt trỏ chuột tại ô I17 (rất quan trọng, không được làm sai)
- Bước 2: đặt Name - Class
Mã:
=OFFSET('Tinh S'!$C$5,MATCH('Tinh S'!$B17,'Tinh S'!$B$6:$B$11,0),,,8)
- Bước 3: Đặt Name - HangCv (Name này bạn đã đặt sẵn trong bảng tính nên tôi không đổi)
Mã:
='Tinh S'!$C$4:$J$4
- Bước 4: Đặt Name - PosX_1
Mã:
=LOOKUP(2,1/(('Tinh S'!$H17-'Tinh S'!hangCv)>0),{1,2,3,4,5,6,7,8})
- Bước 5: Đặt Name - PosX_2
Mã:
=PosX_1+1
- Bước 6: Đặt Name - X_1
Mã:
=INDEX('Tinh S'!hangCv,PosX_1)
- Bước 7: Đặt Name - X_2
Mã:
=INDEX('Tinh S'!hangCv,PosX_2)
- Bước 8: Đặt Name Y_1
Mã:
=INDEX(Class,PosX_1)
- Bước 9: Đặt Name - Y_2
Mã:
=INDEX(Class,PosX_2)
- Bước 10: Tại I17 gõ công thức sau và kéo xuống
Mã:
=IF(H17=MIN(hangCv),INDEX(Class,,1),IF(H17=MAX(hangCv),INDEX(Class,,8),Y_1+(Y_2-Y_1)*(H17-X_1)/(X_2-X_1)))

Nói thì dài chứ làm lại vô cùng đơn giản, bạn xem file sẽ rõ

Một vấn đề nữa muốn nói với bạn: File của bạn bị nhiễm vi rút, bạn nên tìm và diệt sẽ giảm dung lượng File và một số các lợi ích nữa.
 

File đính kèm

Cảm ơn bạn dhn46 đã chỉ dẫn tận tình. Mình đã hiểu về cách lập công thức của bạn và học thêm được 1 cách đặt tên (name) chứa 1 công thức.
Tuy nhiên mình chưa hiểu các tham số trong công thức được lập ở bước 4. Nhờ bạn giải thích từng tham số với. cảm ơn!
- Bước 4: Đặt Name - PosX_1
=LOOKUP(2,1/(('Tinh S'!$H17-'Tinh S'!hangCv)>0),{1,2,3,4,5,6,7,8})

@Ah, mình có dùng bkav pro nhưng khi duyệt virut thì không thấy gì. không biết bạn đang dùng phần mềm nào để duyệt virut?
 
Lần chỉnh sửa cuối:
Cảm ơn bạn dhn46 đã chỉ dẫn tận tình. Mình đã hiểu về cách lập công thức của bạn và học thêm được 1 cách đặt tên (name) chứa 1 công thức.
Tuy nhiên mình chưa hiểu các tham số trong công thức được lập ở bước 4. Nhờ bạn giải thích từng tham số với. cảm ơn!

@Ah, mình có dùng bkav pro nhưng khi duyệt virut thì không thấy gì. không biết bạn đang dùng phần mềm nào để duyệt virut?
Tôi giải thích 2 ý bạn hỏi nhé.

1/
- Bước 4: Đặt Name - PosX_1
=LOOKUP(2,1/(('Tinh S'!$H17-'Tinh S'!hangCv)>0),{1,2,3,4,5,6,7,8})
Hàm Lookup là hàm dò tìm cấu trúc: LOOKUP(lookup_value, lookup_vector, result_vector)
=> Với công thức trên thì
lookup_value là 2
lookup_vector là những giá trị trong mảng 'Tinh S'!$H17-'Tinh S'!hangCv của bạn có giá trị >0
là {1,2,3,4,5,6,7,8} tương ứng với giá trị cuối cùng trong 'Tinh S'!$H17-'Tinh S'!hangCv mà có giá trị >0

Bạn cần tìm hiểu về hàm mảng thì bạn sẽ hiểu kỹ hơn về vấn đề này, giải thích rất khó hình dung. Hoặc bạn có thể bôi đen từng phần trong công thức rồi bấm F9 để có kết quả từng phần để ngẫm dần dần quy luật

2/ Tôi không dùng phần mềm nào cả mà chỉ do tôi làm như sau và biết được.
Đầu tiên mở File => Save as sang đuôi .xlsx thì không được => Chọn cửa số VBA và tôi nhận thấy file của bạn có sheet ẩn trong đó có chứa Macro 4.
 
Tôi giải thích 2 ý bạn hỏi nhé.

1/
Hàm Lookup là hàm dò tìm cấu trúc: LOOKUP(lookup_value, lookup_vector, result_vector)
=> Với công thức trên thì
lookup_value là 2
lookup_vector là những giá trị trong mảng 'Tinh S'!$H17-'Tinh S'!hangCv của bạn có giá trị >0
là {1,2,3,4,5,6,7,8} tương ứng với giá trị cuối cùng trong 'Tinh S'!$H17-'Tinh S'!hangCv mà có giá trị >0

Cơ bản thì mình vẫn hiểu về hàm lookup.
Ý của mình là:
vì sao
1. lookup_value là: 2
2. lookup_vector là: 1/(('Tinh S'!$H17-'Tinh S'!hangCv)>0)

Cảm ơn nhiều
 
Web KT

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

Back
Top Bottom